Programación General > C/C++

 contar palabras de una cadena de caracteres

<< < (6/6)

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

[0] Índice de Mensajes

[*] Página Anterior

Ir a la versión completa