Programación General > C/C++
contar palabras de una cadena de caracteres
juan1987:
Hola, he intentado probar ese código pero no funciona. ¿Están seguros que funciona? ¿Ya lo probaron?
Gracias,
Juan
Amilius:
Acabo de arreglar el fallo en el ejemplo que puse para C++.
Esta es otra forma de contar palabras, esta vez para C.
Básicamente cuenta las transiciones entre palabras y secuencias de espacios en blanco:
main.c
--- Código: ---#include <stdio.h>
int contarPalabras(const char* cadena)
{
int cambios = 1;
int anteriorEsEspacio = 1;
int actualEsEspacio;
if (0 == cadena) return 0;
while (*cadena)
{
actualEsEspacio = isspace(*cadena) != 0;
cambios += actualEsEspacio ^ anteriorEsEspacio;
anteriorEsEspacio = actualEsEspacio;
cadena++;
}
return cambios / 2;
}
void imprimirPalabras(const char* cadena)
{
printf("%s\nPalabras: %d\n\n", cadena, contarPalabras(cadena));
}
int main()
{
imprimirPalabras("");
imprimirPalabras(" ");
imprimirPalabras("una");
imprimirPalabras(" una");
imprimirPalabras("una ");
imprimirPalabras(" una ");
imprimirPalabras(" dos palabras ");
imprimirPalabras("dos palabras");
imprimirPalabras(" Varias palabras separadas por uno o varios espacios");
imprimirPalabras("Varias \n Palabras\n en \n varias \nlineas");
}
--- Fin del código ---
ElZard:
--- Cita de: Amilius en Viernes 23 de Septiembre de 2011, 22:24 ---Acabo de arreglar el fallo en el ejemplo que puse para C++.
Esta es otra forma de contar palabras, esta vez para C.
Básicamente cuenta las transiciones entre palabras y secuencias de espacios en blanco:
main.c
--- Código: ---#include <stdio.h>
int contarPalabras(const char* cadena)
{
int cambios = 1;
int anteriorEsEspacio = 1;
int actualEsEspacio;
if (0 == cadena) return 0;
while (*cadena)
{
actualEsEspacio = isspace(*cadena) != 0;
cambios += actualEsEspacio ^ anteriorEsEspacio;
anteriorEsEspacio = actualEsEspacio;
cadena++;
}
return cambios / 2;
}
void imprimirPalabras(const char* cadena)
{
printf("%s\nPalabras: %d\n\n", cadena, contarPalabras(cadena));
}
int main()
{
imprimirPalabras("");
imprimirPalabras(" ");
imprimirPalabras("una");
imprimirPalabras(" una");
imprimirPalabras("una ");
imprimirPalabras(" una ");
imprimirPalabras(" dos palabras ");
imprimirPalabras("dos palabras");
imprimirPalabras(" Varias palabras separadas por uno o varios espacios");
imprimirPalabras("Varias \n Palabras\n en \n varias \nlineas");
}
--- Fin del código ---
--- Fin de la cita ---
No me gusta revivir temas, pero tengo una duda, y no me gusta quedarme con dudas, y es que soy alumno de primer año
y con suerte lo mas dificil que me han pasado es arreglos y funciones en c y no entiendo ni mitad de sus codigos, pero igual pude hacer un programa que cuenta palabras
--- Código: ---#include <stdio.h>
char a[100];
int Calcular_Palabras ()
{
int palabras=1,contador=0;
while(a[contador] != '\0') {
if(a[contador] == ' ')
palabras++;
contador++;
}
return palabras;
}
int main (void)
{
while (1) {
printf("\n\tIngrese una cadena: ");
gets(a);
printf("\n\tEl numero de palabras es: %i\n\n",Calcular_Palabras());
}
return 0;
}
--- Fin del código ---
entonces no entiendo por que ustedes lo hacen tan dificil y con tantas cosas... o sere yo xD
herzdark:
--- Cita de: ElZard en Miércoles 9 de Noviembre de 2011, 23:06 ---No me gusta revivir temas, pero tengo una duda, y no me gusta quedarme con dudas, y es que soy alumno de primer año
y con suerte lo mas dificil que me han pasado es arreglos y funciones en c y no entiendo ni mitad de sus codigos, pero igual pude hacer un programa que cuenta palabras
--- Código: ---#include <stdio.h>
char a[100];
int Calcular_Palabras ()
{
int palabras=1,contador=0;
while(a[contador] != '\0')
{if(a[contador] == ' ')
palabras++;
contador++;
}
return palabras;
}
int main (void)
{
while (1) {
printf("\n\tIngrese una cadena: ");
gets(a);
printf("\n\tEl numero de palabras es: %i\n\n",Calcular_Palabras());
}
return 0;
}
--- Fin del código ---
entonces no entiendo por que ustedes lo hacen tan dificil y con tantas cosas... o sere yo xD
--- Fin de la cita ---
te digo mi experiencia, yo cuando estaba en primer año veia el codigo como lo hiciste vos pero despues cuando vallas pasando los años te exijen q no lo uses con subindices y otras cosas más y respecto a tu codigo la sentencia:
--- Código: C ---int palabra=1;
estas contando una palabra de más por eso empezalo con 0, si no me crees con tu codigo si yo ingresará HOLA A TODOS me retornaría 4 siendo la cantidad de palabras 3
Navegación
[*] Página Anterior
Ir a la versión completa