Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: sabar en 1 Diciembre 2014, 18:16 pm



Título: cadena de caracteres a ASCII
Publicado por: sabar en 1 Diciembre 2014, 18:16 pm
Código
  1. #include<iostream>
  2. #include <string.h>
  3. #include<stdio.h>
  4.  
  5.  
  6. using namespace std;
  7.  
  8. int main(){
  9.           char frase[50];
  10.           int j,i,tam, num_frase[50];
  11.  
  12.           cout<<"ingrese la frase: ";
  13.          gets(frase);
  14.          tam=strlen(frase)-1;
  15.          for(i=0,j=0;j<tam,i<tam;j++, i++){
  16.            frase[i]=num_frase[j];
  17.            cout<<frase[i]<<"="<<num_frase[j]<<"\n";
  18.  
  19.  
  20.          }
  21. }
  22.  
EL PROBLEMA ES QUE ME SALE BASURA AL FINAL Y NO HE VISTO CUAL PUEDE SER EL PROBLEMA :-\


Título: Re: cadena de caracteres a ASCII
Publicado por: fary en 1 Diciembre 2014, 18:28 pm
Estas usando C++, sin embargo, tienes librerías incluidas de C...

Te dejo como sería en C:

Código
  1. #include <stdio.h>
  2.  
  3. int main()
  4. {
  5.    char buffer[50];
  6.  
  7.    printf("Ingresa la frase: ");
  8.    scanf("%s", buffer);
  9.  
  10.    int i = 0;
  11.  
  12.    while (buffer[i])
  13.    {
  14.        printf("%c = %i\n", buffer[i], buffer[i]);
  15.        i++;
  16.    }
  17.  
  18.    return 0;
  19. }

Salida del programa:

Código:
Ingresa la frase: hola
h = 104
o = 111
l = 108
a = 97



Título: Re: cadena de caracteres a ASCII
Publicado por: sabar en 1 Diciembre 2014, 22:30 pm
Estas usando C++, sin embargo, tienes librerías incluidas de C...

Te dejo como sería en C:

Código
  1. #include <stdio.h>
  2.  
  3. int main()
  4. {
  5.    char buffer[50];
  6.  
  7.    printf("Ingresa la frase: ");
  8.    scanf("%s", buffer);
  9.  
  10.    int i = 0;
  11.  
  12.    while (buffer[i])
  13.    {
  14.        printf("%c = %i\n", buffer[i], buffer[i]);
  15.        i++;
  16.    }
  17.  
  18.    return 0;
  19. }

Salida del programa:

Código:
Ingresa la frase: hola
h = 104
o = 111
l = 108
a = 97


hay un problema y es que solo lee la primera palabra y lo que se busca es que lea toda una frase y otro problema aunque menor es que se necesita en c++


Título: Re: cadena de caracteres a ASCII
Publicado por: engel lex en 1 Diciembre 2014, 23:23 pm
El primer código también compila en c++ se usa printf en muchos casos cuando quieres tener control de la impresión, ya que cout algunas veces pasa cosas por alto... tu código tiene cosas de c también (stdio.h y string.h, para c++ es sin .h)

Quieta string.h y stdio.h, usa getline para leer y recorre la cadena con u n while, haces un if de manera que si el carácter leído es '\0' o '\n' haga break para salir del ciclo


Título: Re: cadena de caracteres a ASCII
Publicado por: Orubatosu en 1 Diciembre 2014, 23:39 pm
strlen te da el tamaño del array entre la posición "0" y el carácter de fin, sin incluir este

Cuando te salga "basura" al final siempre el problema es que estas leyendo fuera de los límites que se supone has establecido, y por ahí tienes que buscar el problema.

Recuerda que cuando inicializas una variable del tipo que sea (o casi todas), y eso incluye los arrays, lo que se hace es reservar un espacio de memoria para esa variable, pero el programa en ningún momento se encarga de "limpiar" esa zona, de manera que puede contener cualquier valor.

Y esa es la "basura" que puede salirte. En estos casos siempre tienes la pista de porque falla, y por ahí es por donde debes de buscar.



Título: Re: cadena de caracteres a ASCII
Publicado por: rir3760 en 2 Diciembre 2014, 01:50 am
EL PROBLEMA ES QUE ME SALE BASURA AL FINAL Y NO HE VISTO CUAL PUEDE SER EL PROBLEMA
Por favor NO publiques todo el texto de tu mensaje en mayúsculas, lo prohíben las reglas de los foros.

En cuanto al programa se deben cambiar los nombres de los encabezados y evitar el uso de la función gets, las razones de ello se indican en el tema |Lo que no hay que hacer en C/C++. Nivel basico| (http://foro.elhacker.net/programacion_cc/lo_que_no_hay_que_hacer_en_cc_nivel_basico-t277729.0.html).

Ademas:
* No es necesario el uso de dos contadores (las variables "i" y "j"), con uno solo basta.
* Para procesar todos los caracteres el limite debe ser "< strlen(frase)".
* Lo anterior no es necesario ya que las cadenas "a la C" se pueden procesar hasta encontrar el carácter '\0'.
* El programa no genera la salida esperada porque la asignación esta al revés:
Código
  1. frase[i] = num_frase[j]; // Deberia ser num_frase[j] = frase[i];

Por ultimo no es necesario un array de enteros, en su lugar se puede generar el entero correspondiente con:
Código
  1. cout << frase[i] << "=" << int(frase[i]) << endl;

Un saludo