Dev - C++ - Problemas con función strchr

 
Vista:
sin imagen de perfil

Problemas con función strchr

Publicado por Luis (4 intervenciones) el 06/11/2016 08:21:04
Verán, estoy haciendo un programa bastante sencillo, que bien lo podría hacer con un if de otra forma, pero necesito aprender a utilizar la función strchr.
En este programa trato de verificar las vocales en una cadena, lo hago de la siguiente forma:

if (strchr("aeiouAEIOU", cadena[i]))
{
contadorVocales++;
}

El problema es con el contador, y creo que resulta debido a la función, porque cuando hago un if(cadena[i] == 'a' || cadena[i]=='e' ... || cadena[i]=='U') mi contador funciona claramente.
Si ingreso "aeiou" como cadena me dice que contadorVocales es 5, pero al usar la función strchr, me dice que contadorVocales es igual a contadorVocales+1, es decir, si ingreso "aeiou" me dice que contadorVocales es 6. Bien podría imprimir:
std::cout<<contadorVocales-1;
pero no quiero hacer eso, prefiero comprender el porqué está haciendo esto
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 661
Bronce
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Problemas con función strchr

Publicado por agustin (522 intervenciones) el 06/11/2016 08:34:57
strchr busca el carácter sin signo o unsigned char en una cadena INCLUIDO EL CARÁCTER DE FIN DE CADENA con lo que mucho ojo porque podría ser por eso y le estas pasando también ese carácter. Supongo que lo heces en un bucle y asegúrate que sea algo como:
1
for (i=0;i <strlen(cadena);i++)
O como:
1
2
3
4
5
6
7
while (cadena[i] != '\0')
   if (strchr("aeiouAEIOU", cadena[i]))
   {
      contadorVocales++;
   }
   i++;
}

Por cierto, no se necesita un if tan extenso en ese caso. Se podría hacer tan corto como:
1
if (toupper(cadena[i]) >= 'A' || toupper(cadena[i] <= 'U')
Con eso ya abarca todas las vocales tanto en mayúsculas como en minúsculas.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Problemas con función strchr

Publicado por Luis (4 intervenciones) el 06/11/2016 08:41:21
JAJAJAJAJAJA. Muchas gracias, me hiciste ver mi error.
Mi código era
1
2
3
4
5
6
7
for (int i = 0; i <= strlen(cadena); i++)
{
if (strchr("aeiouAEIOU", cadena[i]))
{
contadorVocales++;
}
}

usaba un <= en vez de <. Me siento como un tonto, gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 661
Bronce
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Problemas con función strchr

Publicado por agustin (522 intervenciones) el 06/11/2016 08:42:39
Ok, yo pase por ahí.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar