Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: cazagavilan en 13 Abril 2012, 05:03 am



Título: Duda con punteros
Publicado por: cazagavilan en 13 Abril 2012, 05:03 am
Hola, tengo este codigo en el que se calcula la longitud de una cadena de caracteres. El problema es que cuando introducen un espacio se para el contador...

Código
  1. #include <iostream>
  2. using namespace std;
  3.  
  4.  
  5. int longitudCadena(char* );
  6.  
  7. int main()
  8. {
  9. char cadena[50];
  10. cout <<"Introduzca su frase a calcular: " << endl;
  11. cin >> cadena;
  12. longitudCadena(cadena);
  13. cout << "El tamaño de la frase es de: " << longitudCadena(cadena) << " Caracteres." << endl;
  14. system("pause");
  15. return 0;
  16. }
  17. int longitudCadena(char* cadena)
  18. {
  19.  
  20. int valor = 0;
  21. for(;*cadena != 0; valor++, cadena++);
  22.  
  23. return valor;
  24. }
  25.  

Muchas gracias.


Título: Re: Duda con punteros
Publicado por: flony en 13 Abril 2012, 06:02 am
la parte de
Código:
return valor; 
adonde la usas?


Título: Re: Duda con punteros
Publicado por: Beakman en 13 Abril 2012, 06:10 am
En lugar de cin tenés que usar cin.getline();
Código
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. int longitudCadena(char* );
  5.  
  6. int main(){
  7. char cadena[ 50 ];
  8. cout <<"Introduzca su frase a calcular: " << endl;
  9. cin.getline( cadena,50 );
  10. longitudCadena( cadena );
  11. cout << "El tamaño de la frase es de: " << longitudCadena(cadena) << " Caracteres." << endl;
  12. cin.get();
  13. return 0;
  14. }
  15. int longitudCadena( char* cadena ){
  16. int valor = 0;
  17. for(;*cadena != 0; valor++, cadena++);
  18. return valor;
  19. }


Título: Re: Duda con punteros
Publicado por: cazagavilan en 13 Abril 2012, 18:51 pm
Me puedes explicar que hace aqui exactamente cin.getline? Lo que yo mas o menos recuerdo es que evita que introduzcas mas caracteres de los que marca (cin.getline( cadena,50)).


Título: Re: Duda con punteros
Publicado por: Beakman en 13 Abril 2012, 22:13 pm
Si vos usas cin con el operador >> solo vas a ingresar bloques de caracteres sin espacios. La cadena termina cuando se encuentra uno.
En este caso cin.getline() permite que ingreses 50 caracteres sin importar si uno de ellos es un espacio o no. también podés pasarle como tercer argumento un delimitador.
Aca un poco más de info:
http://www.minich.com/education/wyo/cplusplus/cplusplusch10/getfunction.htm


Título: Re: Duda con punteros
Publicado por: cazagavilan en 14 Abril 2012, 05:47 am
Muchas gracias!