Foros del Web » Programación para mayores de 30 ;) » C/C++ »

simbolos basura al imprimir una cadena

Estas en el tema de simbolos basura al imprimir una cadena en el foro de C/C++ en Foros del Web. hola quisiera que por favor me ayudaran a eliminar unos símbolos basura que me salen al imprimir en un par de códigos que tengo, creo ...
  #1 (permalink)  
Antiguo 20/11/2012, 16:43
 
Fecha de Ingreso: septiembre-2012
Mensajes: 29
Antigüedad: 12 años, 3 meses
Puntos: 0
simbolos basura al imprimir una cadena

hola quisiera que por favor me ayudaran a eliminar unos símbolos basura que me salen al imprimir en un par de códigos que tengo, creo que debo iniciailsar algo en 0 pero no se que es :S. El compilador que use es DEV C++ 5.2.0.3
Código C++:
Ver original
  1. #include <iostream>
  2. #include <cstdlib>
  3. using namespace std;
  4. int main()
  5. {
  6. char* arreglo=new char[10];
  7. cout<<"digite la frase\n";
  8. cin.getline(arreglo,10);
  9. cout<<"cadena original\t\t"<<"cadena reemplazada\n";
  10. for(int i=0;i<10;i++){
  11.     cout<<arreglo[i];
  12.     }
  13.     cout<<"\t\t";
  14. for(int i=0;i<10;i++){
  15.     if(arreglo[i]=='e'){
  16.             arreglo[i]='*';
  17.         }
  18.         cout<<arreglo[i];
  19.         }
  20. system("pause");
  21. return 0;
  22. }

Código C++:
Ver original
  1. #include <iostream>
  2. #include <cstdlib>
  3. using namespace std;
  4. int main()
  5. {
  6. char* cad_a=new char[30];
  7. char* cad_b=new char[30];
  8. int i, j;
  9. char temp;
  10. cout << "Introduce una cadena: "; //pide los datos
  11. cin.getline (cad_a,30);
  12.  
  13. for(i=0; i<30; i++)
  14. cout << cad_a[i] << " "; //muestra es pantalla
  15. cout << endl << endl;
  16.  
  17. for(i=0; i<29; i++)
  18. {  
  19. temp=cad_a[i];
  20. cad_b[29-i]=temp;
  21. }
  22. for(j=0; j<30; j++)
  23. cout << cad_b[j] << " "; //muesta cadena invertida
  24. if(cad_a[i]==cad_b[j])
  25. cout<<"es palindromo";
  26. else
  27. cout<<"no es palindromo";
  28. return 0;
  29. }

Última edición por sonrasiel; 20/11/2012 a las 16:49
  #2 (permalink)  
Antiguo 21/11/2012, 02:29
 
Fecha de Ingreso: noviembre-2010
Ubicación: Venezuela
Mensajes: 24
Antigüedad: 14 años, 1 mes
Puntos: 0
Respuesta: simbolos basura al imprimir una cadena

hola, para imprimir no recorras el arreglo letra por letra como haces

for(int i=0;i<10;i++){
cout<<arreglo[i];
}

debido que de esa manera si la palabra ingresada tenia 5 caracteres, el resto va a contener basura de la memoria, porque estas imprimiendo mas de lo que se ingreso.

solo usa

cout<<arreglo;

de esta manera va a mostrar hasta donde se encuentra el caractar de terminacion de cadena (\0).
  #3 (permalink)  
Antiguo 21/11/2012, 16:53
 
Fecha de Ingreso: diciembre-2011
Ubicación: CABA
Mensajes: 433
Antigüedad: 13 años
Puntos: 94
Respuesta: simbolos basura al imprimir una cadena

Hola! tambien podrias cambiar la condicion de los for, algo como:
Código C:
Ver original
  1. for(i=0; arreglo[i]!='\0'; i++) /* el bucle termina cuando llega al final de la cadena */


Saludos
  #4 (permalink)  
Antiguo 21/11/2012, 17:26
 
Fecha de Ingreso: septiembre-2012
Mensajes: 29
Antigüedad: 12 años, 3 meses
Puntos: 0
Respuesta: simbolos basura al imprimir una cadena

decidí cambiar la condición de los for pero no tuvo ningún efecto, ademas parece que el if no esta haciendo nada :S. ingreso cualquier cadena pero me sale siempre es palindromo.

Código C++:
Ver original
  1. #include <iostream>
  2. #include <cstdlib>
  3. using namespace std;
  4. int main()
  5. {
  6. char* cad_a=new char[30];
  7. char* cad_b=new char[30];
  8. int i, j;
  9. char temp;
  10. cout << "Introduce una cadena: "; //pide los datos
  11. cin.getline (cad_a,30);
  12.  
  13. for(i=0; cad_a[i]!='\0'; i++)
  14. cout << cad_a[i] << " "; //muestra es pantalla
  15. cout << endl << endl;
  16.  
  17. for(i=0; cad_a[i]!='\0'; i++)
  18. {  
  19. temp=cad_a[i];
  20. cad_b[29-i]=temp;
  21. }
  22. for(j=0; j<30; j++)
  23. cout << cad_b[j] << " "; //muesta cadena invertida
  24. if(cad_a[i]==cad_b[j])
  25. cout<<"es palindromo";
  26. else
  27. cout<<"no es palindromo";
  28. return 0;
  29. }

No puedo cambiar el ultimo for por que no me invierte la cadena le ponga i o j lo que intente fue
Código C++:
Ver original
  1. for(j=0; cad_b[j]!='\0'; j++)
  2. cout << cad_b[j] << " "; //muesta cadena invertida

si cambio la condicion del if
Código C++:
Ver original
  1. if(cad_a[i]==cad_b[j])
por
Código C++:
Ver original
  1. if(cad_a==cad_b)
me sale siempre no es palindromo no entiendo por que pasa esto si el primero compara cada elemento de la cadena y el otro compara la cadena completa me trae esto.

Última edición por sonrasiel; 21/11/2012 a las 17:33
  #5 (permalink)  
Antiguo 21/11/2012, 18:17
 
Fecha de Ingreso: noviembre-2010
Ubicación: Venezuela
Mensajes: 24
Antigüedad: 14 años, 1 mes
Puntos: 0
Respuesta: simbolos basura al imprimir una cadena

Código C++:
Ver original
  1. if(cad_a==cad_b)

esto no sirve para comparar cadena de caracteres para eso esta la funcion strcmp(str1,str2)

para hacer la compraracion de una cadena con otra deberia de implementar un ciclo repertivivo para comprar caracter por caracter con una bandera que cambie su valor segun sea el caso.

para eso usarias la forma

Código C++:
Ver original
  1. if(cad_a[i]==cad_b[i])

Etiquetas: basura, int, simbolos, cadenas
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 04:31.