Jump to content

[Resolvido] Contar palavras


askazy
 Share

Recommended Posts

Bom eu acabei clicando em resolvido no outro tópico por engano, em relação a um outro que fiz, então por isso estou criando esse.

O objetivo do programa é contar quantas palavras com 5 ou menos letras são digitadas, antes que se digite "#"

O exercício tem algumas restrições:

-A leitura é feita caractere a caractere, não pode usar string.

-O que delimita uma palavra da outra é um espaço em branco

- O espaço em branco não conta como palavra, nem #.

Exemplo de entrada:

e

u

n

a

o

s

e

i

#

Saida: O numero de palavras com 5 ou menos letras eh 3.

#include <stdio.h>
int main(){
    int cont=0,cont2=0; /*cont serve para contar as letras, cont2 conta as palavras que tem menos de 5 letras*/
    char letra;
    do{
    letra=getchar();
    if (letra!= ' ') /*se letra e diferente de espaço em branco incrementa contador de letras*/
        cont++;
    else{
        if (cont>0 && cont <=5) /*se a palavra tem entre 1 ou 5 letras entao incrementa cont2 que é palavras*/
            cont2++;
        else
            cont=0;
    }
    }while (letra!='#');
    printf ("O numero de palavras com 5 ou menos letras eh %d\n",cont2);
return 0;
}

Acredito que o problema possa estar nos espaços em branco, porque nao sei como é a leitura deles.

Link to comment
Share on other sites

if (cont>0 && cont <=5) /*se a palavra tem entre 1 ou 5 letras entao incrementa cont2 que é palavras*/
   cont2++;
else
   cont=0;

Pensa melhor neste passo .. Apenas estás a 'reiniciar' o cont se a palavra for maior que 5 letras, mas nada te garante que a seguir não vais ter que voltar a contar as letras de uma nova palavra.

Edited by polska
  • Vote 1

Corrige um sábio e ele mais sábio ficará. Corrige um ignorante e um inimigo ganharás.

Link to comment
Share on other sites

Não consegui entender muito bem o que você falou, mas a minha idéia é:

1) Contar letras até aparecer um espaço em branco

2) Se aparecer um espaço em branco verificar se o numero de letras esta dentro do esperado, se estiver cont2++ uma palavra, senao 0 o cont e começa dinovo.

Um problema que percebi é que se caso eu digite aleluia#, vai imprimir 0 mais na verdade tem uma palavra.

Link to comment
Share on other sites

alguém me da uma sugestão?

pega numa folha de papel, e escreve por extenso todos os passos necessários (em português falado) para resolver o problema.

não esqueças ou suponhas que está subjacente algum ponto, escreve tudo, mesmo tudo o que é necessário.

depois disso, volta a ler o que escreveste e e fizer sentido, compara com o teu código.

nota : a conversão de um texto bem escrito é praticamente directo para código

IRC : sim, é algo que ainda existe >> #p@p
Link to comment
Share on other sites

Um problema que percebi é que se caso eu digite aleluia#, vai imprimir 0 mais na verdade tem uma palavra.

Se fizeres o input de aleluia#, ele tem obrigatoriamente de dar o output de 0 palavras contadas pois "aleluia" tem 7 caracteres, e o teu programa só conta palavras que tenham entre 1 e 5 caracteres.

Além disso, já te indicaram exatamente onde reside o problema. É algo que está-te a passar ao lado pois estás completamente agarrado ao teu código, experimenta fazer o que o @HappyHippyHippo recomendou, vai-te ajudar muito. 😉

Link to comment
Share on other sites

gostaria de uma indicação de livro de linguagem C, nada muito aprofundado(faço estatística) ou até mesmo vídeo aulas.

Já criaste um tópico acerca do assunto, não vale a pena espalhar a mesma pergunta em vários locais. Não vais obter resposta mais rapidamente com isso.

Mais, perguntar de repente por um livro após as sugestões dadas, a meu ver, não fica nada bem - parece que estás a dizer "mais vale um livro que os vossos conselhos".

Se não entendeste os conselhos ou ainda ficaste com dúvidas, pergunta. O pessoal vai arranjar maneira de te ajudar de várias formas possíveis até entenderes, desde que mantenhas o interesse em ser ajudado e em resolver o problema.

Edited by thoga31

Knowledge is free!

Link to comment
Share on other sites

acho que agora eu consegui, pelo menos o que testei funcionou.

#include <stdio.h>
int main(){
    int cont=0,cont2=0;  /*cont serve para contar as letras, cont2 conta as palavras que tem menos de 5 letras*/
    char letra;
    do{
      letra=getchar();
        if (letra != '#' && letra != ' ')
           cont++;
        else{
            if (cont>0 && cont<=5)
               cont2++;
            cont=0;
        }
    }while (letra!='#');
    printf ("O numero de palavras com 5 ou menos letras eh %d\n",cont2);
 return 0;
}
Edited by thoga31
GeSHi
Link to comment
Share on other sites

acho que agora eu consegui, pelo menos o que testei funcionou.

ainda não ... testa este código com a pequena alteração que fiz para ver o que se passa:

#include <stdio.h>

int main(){
 int cont = 0, cont2 = 0;
 char letra;

 do {
   letra=getchar();
   if (letra != '#' && letra != ' ') {
     cont++;
     printf("%d >> %c|\n", cont, letra);
   } else {
     if (cont>0 && cont<=5)
       cont2++;
     cont=0;
   }
 } while (letra!='#');

 printf ("O numero de palavras com 5 ou menos letras eh %d\n", cont2);

 return 0;
}
IRC : sim, é algo que ainda existe >> #p@p
Link to comment
Share on other sites

Tive que fazer uma pesquisa no google sobre os comandos de leitura scanf,getchar e getch para descobrir que fica contando o enter, fico indignado com essas listas da faculdade onde pedem exercícios com conteúdo que não é apresentado em sala.

#include <stdio.h>
int main(){
 int cont = 0, cont2 = 0;
 char letra;
 do {
   letra=getchar();
   fflush(stdin);
   if (letra != '#' && letra != ' ' && letra !='\n') {
     cont++;
   } else {
     if (cont>0 && cont<=5)
       cont2++;
     cont=0;
   }
 } while (letra!='#');
 printf ("O numero de palavras com 5 ou menos letras eh %d\n", cont2);
 return 0;
}

Funciona?

Como eu faço para excluir o enter da leitura se eu quiser usar o scanf por exemplo? Sempre que eu usar o getchar eu tenho que limpar o buffer pra não contar o enter?

Edited by thoga31
GeSHi
Link to comment
Share on other sites

Funciona?

está melhor, mas agora sempre que chega a um '\n' ele vai assumir que chegou ao fim de uma palavra ...

Como eu faço para excluir o enter da leitura se eu quiser usar o scanf por exemplo?

scanf serve para ler dados formatados (com um formato bem específico/esperado), e como um utilizador só escreve o que é pedido 90% das vez, as outras 10% irá dar bronca.

o que tens da fazer é supor as percentagens inversas : os dados só irão ser inseridos 10% dos casos, logo irão vem sempre errados.

se mesmo assim pretendes usar scanf directamente para ler dados do teclado tens algumas soluções:

scanf("%d[^\n]\n", &valor); // lê um valor inteiro : %d
                           // descarta todos os valores até encontrar um \n : [^\n]
                           // ler o \n que ainda se encontra no buffer de leitura

Sempre que eu usar o getchar eu tenho que limpar o buffer pra não contar o enter?

depende dos dados que estás a ler, neste caso sim, tens de retirar ...

IRC : sim, é algo que ainda existe >> #p@p
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.