Duda con punteros

Iniciado por cazagavilan, 13 Abril 2012, 05:03 AM

0 Miembros y 2 Visitantes están viendo este tema.

cazagavilan

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 (cpp) [Seleccionar]
#include <iostream>
using namespace std;


int longitudCadena(char* );

int main()
{
char cadena[50];
cout <<"Introduzca su frase a calcular: " << endl;
cin >> cadena;
longitudCadena(cadena);
cout << "El tamaño de la frase es de: " << longitudCadena(cadena) << " Caracteres." << endl;
system("pause");
return 0;
}
int longitudCadena(char* cadena)
{

int valor = 0;
for(;*cadena != 0; valor++, cadena++);

return valor;
}


Muchas gracias.

flony

la parte de return valor; adonde la usas?
si un problema no tiene solucion entonces no es un problema...es algo inevitable

Beakman

En lugar de cin tenés que usar cin.getline();
Código (cpp) [Seleccionar]
#include <iostream>
using namespace std;

int longitudCadena(char* );

int main(){
char cadena[ 50 ];
cout <<"Introduzca su frase a calcular: " << endl;
cin.getline( cadena,50 );
longitudCadena( cadena );
cout << "El tamaño de la frase es de: " << longitudCadena(cadena) << " Caracteres." << endl;
cin.get();
return 0;
}
int longitudCadena( char* cadena ){
int valor = 0;
for(;*cadena != 0; valor++, cadena++);
return valor;
}

cazagavilan

#3
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)).

Beakman

#4
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

cazagavilan