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
#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");
}
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
#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;
}
entonces no entiendo por que ustedes lo hacen tan dificil y con tantas cosas... o sere yo xD