elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.
 
Inicio Ayuda Buscar Ingresar Registrarse
29 Mayo 2012, 00:53  


Tema destacado: Últimos eventos sobre seguridad/inseguridad

+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse)
| | |-+  Duda ejercicio punteros
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Duda ejercicio punteros  (Leído 1,343 veces)
VonN

Desconectado Desconectado

Mensajes: 151


Learnin' Python&C++


Ver Perfil
Duda ejercicio punteros
« en: 4 Julio 2009, 23:53 »

Hola me quedé en el siguiente ejercicio:
Citar
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 :P

Código
#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
Moderador
***
Desconectado Desconectado

Mensajes: 4.392


Clarin miente, TN opera y los giles regurgitan.


Ver Perfil WWW
Re: Duda ejercicio punteros
« Respuesta #1 en: 4 Julio 2009, 23:58 »

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 Desconectado

Mensajes: 151


Learnin' Python&C++


Ver Perfil
Re: Duda ejercicio punteros
« Respuesta #2 en: 5 Julio 2009, 00:10 »

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

Código
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
ny0x


Desconectado Desconectado

Mensajes: 336


Ver Perfil
Re: Duda ejercicio punteros
« Respuesta #3 en: 5 Julio 2009, 00:16 »

Código
int len(char s[])
{
int l = 0;
while(*(s++) != 0)
l++;
return l;
}
 
En línea
SeC

Desconectado Desconectado

Mensajes: 109


I am mine.


Ver Perfil WWW
Re: Duda ejercicio punteros
« Respuesta #4 en: 5 Julio 2009, 00:17 »

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

Código
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 .

Código
int longitudcadena(char *c)
{
   int cnt=0;
   while(*c!='\0')
   {
       c++;
       cnt++;
   }
   return cnt;
}
En línea

Educad a los niños y no sera necesario castigar a los hombres - Pitagoras.
Ansi-coder
Undersecurity
VonN

Desconectado Desconectado

Mensajes: 151


Learnin' Python&C++


Ver Perfil
Re: Duda ejercicio punteros
« Respuesta #5 en: 5 Julio 2009, 00:21 »

Citar
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:

Código
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 Desconectado

Mensajes: 2.968


/^$/


Ver Perfil WWW
Re: Duda ejercicio punteros
« Respuesta #6 en: 5 Julio 2009, 02:18 »

Yo la dejaría asi:
Código
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

Código
(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}
 

leorocko13@hotmail.com
https://github.com/leogtzr/
VonN

Desconectado Desconectado

Mensajes: 151


Learnin' Python&C++


Ver Perfil
Re: Duda ejercicio punteros
« Respuesta #7 en: 5 Julio 2009, 16:36 »

Hola Leo, me gustó tu idea... Solo una duda:

Código
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
Moderador
***
Desconectado Desconectado

Mensajes: 4.392


Clarin miente, TN opera y los giles regurgitan.


Ver Perfil WWW
Re: Duda ejercicio punteros
« Respuesta #8 en: 5 Julio 2009, 16:42 »

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 Desconectado

Mensajes: 151


Learnin' Python&C++


Ver Perfil
Re: Duda ejercicio punteros
« Respuesta #9 en: 5 Julio 2009, 17:46 »

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
Moderador
***
Desconectado Desconectado

Mensajes: 4.392


Clarin miente, TN opera y los giles regurgitan.


Ver Perfil WWW
Re: Duda ejercicio punteros
« Respuesta #10 en: 5 Julio 2009, 17:47 »

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 Desconectado

Mensajes: 511


Itachi Uchiha


Ver Perfil
Re: Duda ejercicio punteros
« Respuesta #11 en: 7 Julio 2009, 23:30 »

Código
#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 Desconectado

Mensajes: 153


Ver Perfil
Re: Duda ejercicio punteros
« Respuesta #12 en: 8 Julio 2009, 07:40 »

¡¡¡Buenas!!!

Un poquillo mas conpacto:
Código
int LongitudCadena(const char* s)
{
   int i=0;
 
   while(s[i++]);
 
   return i-1;
}
 


¡¡¡Un saludo!!!
En línea
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Duda en ejercicio++
Ejercicios
Lamarkus 1 890 Último mensaje 1 Diciembre 2010, 17:31
por [L]ord [R]NA
[duda] sobre punteros y signed
Programación C/C++
AlxSpy 6 707 Último mensaje 9 Enero 2011, 20:13
por AlxSpy
duda con un ejercicio..
Programación C/C++
fer_fer_73 8 840 Último mensaje 4 Febrero 2011, 01:24
por negux
problema con ejercicio de agenda con punteros
Programación C/C++
attackers 3 517 Último mensaje 17 Noviembre 2011, 04:41
por attackers
Duda con punteros
Programación C/C++
cazagavilan 5 275 Último mensaje 14 Abril 2012, 05:47
por cazagavilan
Powered by SMF 1.1.16 | SMF © 2006-2008, Simple Machines