Tema destacado: Últimos eventos sobre seguridad/inseguridad
Autor
|
Tema: Duda ejercicio punteros (Leído 1,343 veces)
|
VonN
Desconectado
Mensajes: 151
Learnin' Python&C++
|
Hola me quedé en el siguiente ejercicio: Escribir un programa con una función que calcule la longitud de una cadena de caracteres. El nombre de la función será LongitudCadena, debe devolver un "int", y como parámetro de entrada debe tener un puntero a "char". En "main" probar con distintos tipos de cadenas: arrays y punteros. Me está costando aprender punteros  #include <iostream> using namespace std; int longitudcadena(char *); int main() { char cadena[]="HOLA"; cout<<longitudcadena(cadena)<<endl; cin.get(); return 0; } int longitudcadena(char *c) { int cnt; while(*c=32) { c++; cnt++; } return cnt; }
|
|
|
|
|
En línea
|
  Se toma por necios a aquellos que dicen lo que todos pesamos
|
|
|
|
Eternal Idol
|
32 es un espacio, las cadenas terminan en 0, ademas ahi estas asignandole (=) ese valor y no comparando (==).
|
|
|
|
|
En línea
|
 La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste. Juan Domingo Perón
|
|
|
VonN
Desconectado
Mensajes: 151
Learnin' Python&C++
|
Hola EI. Gracias por la aclaración. Corregí lo que me dijiste, pero el código me muestra un número muy grande  . Esta es la función int longitudcadena(char *c) { int cnt; while(*c!='\0') { c++; cnt++; } return cnt; }
|
|
|
|
|
En línea
|
  Se toma por necios a aquellos que dicen lo que todos pesamos
|
|
|
|
|
SeC
Desconectado
Mensajes: 109
I am mine.
|
Hola EI. Gracias por la aclaración. Corregí lo que me dijiste, pero el código me muestra un número muy grande  . Esta es la función int longitudcadena(char *c) { int cnt; while(*c!='\0') { c++; cnt++; } return cnt; } es porque no inicializas cnt, por lo tanto tiene basura y como es obvio basura + cualquier cosa = mas basura . int longitudcadena(char *c) { int cnt=0; while(*c!='\0') { c++; cnt++; } return cnt; }
|
|
|
|
|
En línea
|
|
|
|
VonN
Desconectado
Mensajes: 151
Learnin' Python&C++
|
es porque no inicializas cnt, por lo tanto tiene basura y como es obvio basura + cualquier cosa = mas basura . Ya lo había probado, de todas las maneras, pero ninguna funcionaba, esta vez se me debe haber pasado. Nuevamente muchas gracias x0ʎu si existiera el Karma te llenaría de puntos ^^ La función queda asi: int longitudcadena(char *c) { int cnt=0; while(*(c++)!='\0') { cnt++; } return cnt; }
|
|
|
|
|
En línea
|
  Se toma por necios a aquellos que dicen lo que todos pesamos
|
|
|
Leo Gutiérrez.
. . .. ... ..... ........ ............. .....................
Colaborador
 
Desconectado
Mensajes: 2.968
/^$/
|
Yo la dejaría asi: unsigned int longstr(char *cadena) { char *puntero = cadena; signed int contador = 0; while(*puntero++) contador++; return contador; }
|
|
|
|
« Última modificación: 5 Julio 2009, 02:44 por Leo Gutierrez. »
|
En línea
|
|
|
|
VonN
Desconectado
Mensajes: 151
Learnin' Python&C++
|
Hola Leo, me gustó tu idea... Solo una duda: while(*puntero++) ¿Cuándo se hace false? Cuando el puntero se vuelve NULL?, o cuando es '\0'? Gracias.
|
|
|
|
|
En línea
|
  Se toma por necios a aquellos que dicen lo que todos pesamos
|
|
|
|
Eternal Idol
|
Es lo mismo debido a que \0 es efectivamente 0, NULL tambien, y si evaluas un numero siempre que sea diferente de ser la condicion sera verdadera.
Es decir: if (x != 0) es equivalente a if (x) if (*x != 0) es equivalente a if (*x)
En este caso el puntero nunca apunta a NULL (al principio apunta a la direccion del primer caracter de cadena y va incrementadose en uno) sino que tarde o temprano el caracter desreferenciado es NULL (o 0, o \0) todo eso es lo mismo.
|
|
|
|
|
En línea
|
 La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste. Juan Domingo Perón
|
|
|
VonN
Desconectado
Mensajes: 151
Learnin' Python&C++
|
Se agradece EI. La verdad recien estoy entrando en este tema, y poco a poco le voy a agarrando la mano. Un saludo!
|
|
|
|
|
En línea
|
  Se toma por necios a aquellos que dicen lo que todos pesamos
|
|
|
|
Eternal Idol
|
De nadas 
|
|
|
|
|
En línea
|
 La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste. Juan Domingo Perón
|
|
|
DarkItachi
Desconectado
Mensajes: 511
Itachi Uchiha
|
#include <iostream> using namespace std; int LongitudCadena(char*); int main() { char *linia=new char[30]; cout<<"\nIntroduzca cadena: "; cin.get(linia,30); cout<<"\nLa longitud de la cadena es de: "<<LongitudCadena(linia)<<" caracteres.\n"; delete [] linia; system("pause"); } int LongitudCadena(char *str) { int i=0; while (*str++) { i++; } return i; } Intenté optimizarlo un poco. Espero que te sirva. EDITO: Una cosa leo, para que declaras la variable contador en signed si nunca será negativa?
|
|
|
|
« Última modificación: 7 Julio 2009, 23:34 por Dudasamonton »
|
En línea
|
Come to me when you have these eyes...
By more that you try it, a feather never will achieve to fly.
|
|
|
Eliptico
Desconectado
Mensajes: 153
|
¡¡¡Buenas!!! Un poquillo mas conpacto: int LongitudCadena(const char* s) { int i=0; while(s[i++]); return i-1; } ¡¡¡Un saludo!!!
|
|
|
|
|
En línea
|
|
|
|
|
|