cadena de caracteres a ASCII

Iniciado por sabar, 1 Diciembre 2014, 18:16 PM

0 Miembros y 1 Visitante están viendo este tema.

sabar

Código (cpp) [Seleccionar]
#include<iostream>
#include <string.h>
#include<stdio.h>


using namespace std;

int main(){
           char frase[50];
           int j,i,tam, num_frase[50];

           cout<<"ingrese la frase: ";
          gets(frase);
          tam=strlen(frase)-1;
          for(i=0,j=0;j<tam,i<tam;j++, i++){
            frase[i]=num_frase[j];
            cout<<frase[i]<<"="<<num_frase[j]<<"\n";


          }
}

EL PROBLEMA ES QUE ME SALE BASURA AL FINAL Y NO HE VISTO CUAL PUEDE SER EL PROBLEMA :-\

fary

Estas usando C++, sin embargo, tienes librerías incluidas de C...

Te dejo como sería en C:

#include <stdio.h>

int main()
{
    char buffer[50];

    printf("Ingresa la frase: ");
    scanf("%s", buffer);

    int i = 0;

    while (buffer[i])
    {
        printf("%c = %i\n", buffer[i], buffer[i]);
        i++;
    }
   
    return 0;
}


Salida del programa:

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


Un byte a la izquierda.

sabar

Cita de: mDrinky 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:

#include <stdio.h>

int main()
{
    char buffer[50];

    printf("Ingresa la frase: ");
    scanf("%s", buffer);

    int i = 0;

    while (buffer[i])
    {
        printf("%c = %i\n", buffer[i], buffer[i]);
        i++;
    }
   
    return 0;
}


Salida del programa:

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++

engel lex

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
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

Orubatosu

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.

"When People called me freak, i close my eyes and laughed, because they are blinded to happiness"
Hideto Matsumoto 1964-1998

rir3760

Cita de: sabar en  1 Diciembre 2014, 18:16 PMEL 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|.

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 (cpp) [Seleccionar]
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 (cpp) [Seleccionar]
cout << frase[i] << "=" << int(frase[i]) << endl;

Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language