un contador de palabras

Iniciado por g.izmo, 13 Octubre 2017, 19:58 PM

0 Miembros y 2 Visitantes están viendo este tema.

g.izmo

Tengo que hacer un contador de palabras, (Mi nivel de programacion es bastante basico), y nos pide:
Contar palabras (Solo mayusculas, y sin acentos)
meter uno o mas espacios sin que cuenten
y cuando se presione enter te diga cuantas palabras hay.

en caso de meter caracter invalido, pide una frase de nuevo sin importar la anterior


Me podrian dar alguna idea, lo agradeceria mucho :)

ivancea96

Empiza por lo básico. ¿Cómo distingues tú una palabra de otra?

Citarmeter uno o mas espacios sin que cuenten
Puedes ignorar esto de momento. Hazlo como si solo pudiera haber 1 espacio entre palabras. Ve avanzando.

g.izmo

He pensado que si tengo dos caracteres como variables. Si hago que obligatoriamente empiece por espacio, puedo hacer que cada vez que la segunda variable sea una letra cuente como palabra, si es espacio nada, y si es caracter no valido te lo pida de nuevo.

Cada vez que se introduzca un nuevo caracter, será b, y a será la b anterior (anvanzan de uno en uno).

Podría tener dos comtadores, uno de palabras y otro, que en caso de haber introducido más de cero caracteres no validos te pida la ntroduccion de una nueva frase.


¿Que opciones tengo paraa repetir todo el proceso de nuevo si hay un caracter no valido en la frase?

Gracias por adelantado

ivancea96

Ve por partes. El algoritmo que comentas está bien. Impleméntalo.
Lo de caracteres inválidos lo puedes comprobar antes de empezar ese otro algoritmo.

Cuando tengas algo funcional podrás mazlcar ambos algoritmos en uno, pero de momento, es mejor que implementes lo primero.

g.izmo

Si tengo dos variables 'a''b' puedo irlas escaneando por momentos y que 'a'(el nuevo caracter) introducido se escanee, y pase a ser 'b' cuando se introduzca otro caracter.

Lo que se me ocurre es:

puts("Introduzca frase valida:"); // Si no dejamos espacio, se pondra al declarar b como tal.
ordinal_b=32;
ordinal_a=getche();
printf("%c",b);

while(ordinal_a!=13)
                        ordinal_b=ordinal_a;
         ordinal_a=getche();
         if (ordinal_b=32 && ordinal_a!=32) {palabras=palabras+1;}
if(ordinal_a=13) {printf("Se han escrito: %d palabras", palabras);}


Lo que no se es si esta estructura mantendra la composicion de variables b,a mientras se escaneen todas las teclas pulsadas. si tienes aguna sugerencia me ayudarias muchisimo
 

ivancea96

Tengo varias. En todas las comparaciones pusiste "=" en vez de "==".
Luego, trata de no usar directamente números para los caracteres. Pon un caracter entre comillas simples, que es lo mismo que poner su valor. El 32 lo cambiarías por ' ', y el 13 por '\r'.

Y, lo dicho, prueba el código, mira lo que hace, etc.

g.izmo

#include<stdio.h>
#include<conio.h>



main()
{
  int palabras=0;
  int error=1;
  char a;
  char b;

   while(error!=0) //Cuando se produzca un error se repetira el proceso. Como hemos declarado el error a 1, se iniciara.
   {
      error=0; // Devolvemos el valor 0 al error para que vuelva a contar errores
      puts("Introduzca frase valida:");
      b==' ';
      printf("%c",b); // Comenzamos con un espacio
      scanf("%c%c",&a,&b); //Se escanea el primer espacio que hemos introducido y la primera tecla que pulsemos
      while (a!='\r') // Mientras no se pulse intro se continuan escaneando caracteres
      {
         b==a; //Entonces b pasa a ser la a
         a=getche(); // Y a escanea y muestra la tecla
         if (b==' '&&a!=' ') {palabras=palabras+1;} // Si hay un espacio y un caracter juntos (b,a)
      }
      if(a=='\r') {printf("\nSe han escrito: %d palabras", palabras);break;} // El intro nos muestra el numero de palabras
    }
    getch();
}


El programa comienza bien ("Introduzca frase valida:") el espacio que pedimos al principio y lo que escribamos....

Pero no cuenta palabras, siempre muestra que hay 0 y cuando pulsamos enter hay que pulsarlo dos veces para que muestre las palabras(ssiempre 0)