Ejercicios del capítulo 8 Cadenas de caracteres

1) Teniendo en cuenta la asignación que hemos hecho para la cadena Saludo, hemos escrito varias versiones de una función que calcule la longitud de una cadena, ¿cuáles de ellas funcionan y cuáles no?:

a)
int LongitudCadena(char cad[])
{
   int l = 0;
   while(cad[l]) l++;
   return l;
}

No

b)
int LongitudCadena(char cad[])
{
   int l;
   for(l = 0; cad[l] != 0; l++);
   return l;
}

No

c)
int LongitudCadena(char cad[])
{
   int l = 0;
   do {
      l++;
   } while(cad[l] != 0);
   return l;
}

No

Comentarios de los usuarios (8)

Melon
2010-04-23 21:00:33

Hay algo que no me queda claro.

En el Ejercicio 8:

b)

int LongitudCadena(char cad[])
{
   int l;
   for(l = 0; cad[l] != 0; l++);
   return l;
}

(N)

Mal: Bueno, no hacemos más que contar hasta encontrar el nulo, pero con un bucle for.

En el código dice lo siguiente:

for(l = 0; cad[l] != 0; l++);

l = 0, si cad[l] no es igual a 0, l se incrementa en 1.

En la parte de cad[l] no es igual a 0, SI es igual a 0, si la estás declarando como 0 apenas empieza el for.

Entonces =/

caremao
2010-06-20 04:57:27

Lo que estás comparando es el valor del array en la posición l, no el valor de l, por lo tanto en la posición l==0 del arreglo puede haber cualquier valor.

Gabriel Zitterspiller
2010-06-27 02:27:29

Mi comentario es por el ejercicio 8a:

int LongitudCadena(char cad[])
{
   int l = 0;
   while(cad[l]=0) l++;
   return l;
}

Lo marque como mal y me aparece:

Mal: Bueno, no hacemos más que contar hasta encontrar el nulo.

Lo haria mientras el valor de cad[l] sea 0, pero nunca llegaria a contar hasta el ultimo porque el primer valor de un char[] nunca es nulo (solo en el caso que sea un char vacio). Asi que no funciona.

int LongitudCadena(char cad[])
{
   int l = 0;
   while(cad[l]!=0) l++;
   return l;
}

Esta seria la correccion, hacerlo mientras el valor de cad[l] NO sea nulo.

Salvador Pozo
2010-06-29 12:59:04

Las sentencias siguientes son equivalentes:

while(cad[l]) l++;
while(cad[l]!=0) l++;

Ten en cuenta que la conversión entre valores enteros y booleanos es que cualquier valor distinto de cero se considera verdadero, y un valor nulo se considera falso.

Por lo tanto, cad[l] será falso sólo cuando contenga el carácter nulo.

Raúl Rivera Z
2013-11-18 17:45:24

Hola.

En el ejercicio 8.c, dice que dará como resultado un carácter

de más, lo compilé y me dió de respuesta 4 (Hola). Aquí el

código:

int i;

char saludo[5] = "Hola";

i = LongitudCadena(saludo);

cout << i;

Steven R. Davidson
2013-11-18 19:19:23

Hola Raúl,

Tienes razón. El algoritmo contará correctamente la cantidad de caracteres en la cadena. El otro error sigue vigente: no contabiliza correctamente la cadena nula, al saltarse la verificación del primer carácter.

Cuando podamos, corregiremos el comentario. Gracias.

Steven

xhunik
2015-08-09 20:32:47

hay un problema y es que cuando se asignan las variables no pueden empezar con números y en todos las variables se declara como:

int 1 = 0;

o como:

 int 1;

lo cual no es valido puesto que el primer y único carácter de identificación es un numero
Steven R. Davidson
2015-08-10 02:49:57

Hola xhunik,

Creo que el problema es con la fuente del texto en la página porque tenemos escrito una ele y no un uno; es decir, tenemos esto,

int l = 0;

y no,

int 1 = 0;

Perdona la confusión.

Steven