• 0
Sign in to follow this  
Tamanini

Função Para Verificar O Total De Palavras De Uma Frase?

Question

Olá pessoal.

Existe algum função em C que conte o total de palavras?

Imagino que não, então o que eu pensei era contar através de algum delimitador, por exemplo o espaço em branco?

Share this post


Link to post
Share on other sites

6 answers to this question

Recommended Posts

  • 0

Talvez o jeito mais fácil de fazer isso seja com o strtok, que devolve cadeias que estão delimitadas por algum caracter.

por exemplo

strtok(s, " \t")

devolve a primeira palavra da string s.

para as outras chamadas você não passa a string, apenas NULL, ou seja:

strtok(NULL, " \t")

isso vai devolver a segunda palavra. Se você chamar denovo vai devolver a terceira e dai por diante.

Detalhes importantes:

" \t" garante que os delimitadores são espaços ' ' e o tab.

quando strtok devolver NULL significa que todas as palavras já foram devolvidas

o strtok "estraga" a sua string, colocando onde encontra delimitadores portanto cuidado se for usar a frase original, qualquer coisa faça um strcpy(copia,s) e rode o strtok na copia

não se esqueça de dar #include <string.h>

Para resolver seu probema basta fazer algo do tipo

int conta(char string[])
{
  int i  = 1;
  if(strtok(string," \t") == NULL)
     return 0;
  while(strtok(NULL, " \t"))
       i++;
   return i;
}

Edited by Rafael Schouery (VidaGeek)

Share this post


Link to post
Share on other sites
  • 0

Se voce apenas quer contar as palavras, da pra fazer de um jeito mais eficiente, embora um pouco mais complicado:

Enquanto não encontrar \ 0

1-Percorra a frase ate encontrar caracteres não brancos(que não são espaco, tab, \r, \n e \ 0)

2-incremente contadora de palavras

3-Percorra a frase ate encontrar caracteres brancos

Se quiser coloco em C depois aqui no forum. Mas é um bom exercicio pra praticar.

Share this post


Link to post
Share on other sites
  • 0

Tentei assim, mas está dando erro quando executo:

#include <stdio.h>
#include <string.h>

void main(void){
int i=0;
char vet[100];

    printf("Digite uma frase:\n");
    gets(vet);     /* lê a frase digitada e armazena na variável vet, 
                   incluíndo caracteres em branco */
    // "minha primeira frase"     total de palavras deverá ser 3

    while(strtok(NULL, " \t"))
       i++;


    printf("O total de palavras e %d \n", i);
}

Share this post


Link to post
Share on other sites
  • 0

você esqueceu de fazer aquela primeira chamada do strtok que passa a string ao invés de NULL.

Portanto ele não sabe qual string você quer separar...

basta adicionar

if(strtok(vet, " \t") == NULL)
  printf("O total de palavras e %d \n", i);
else
{
  while ...
}

Share this post


Link to post
Share on other sites
  • 0

é só usar a função strlen()! (inclua a biblioteca string.h ou cstring em C++)

strlen(nome_da_variável)
Protótipo da strlen:
size_t strlen(const char *str)
Ela conta e retorna o número de caracteres em uma string (sem contar o '\ 0'). Para contar a partir de algum caracter em específico, localize a posição dele no vetor e conte a partir dele! A função strstr que usei poderá lhe ajudar nessa tarefa. Ela retorna o ponteiro da posição do vetor que o caracter está e retorna 0 caso não encontre a palavra desejada. Ela localiza uma string dentro da outra. (inclua a biblioteca string.h ou cstring em C++) Uso:
strstr(nome_do_vetor,palavra que você quer procurar)
Protótipo da strstr:
char *strstr(char *str1,const char *str2)

Ex.:


#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <conio.h> // Biblioteca para a função getch().
#define MAX_NOME 30

int main(int argc,char **argv)
{
char *exemplo="Bruce";
printf("Esta palavra contem %d caracteres.\n",strlen(strstr(exemplo,"u")));
getch();
return EXIT_SUCCESS;
}
[/codebox]

Espero ter ajudado!

Usem a BBCode "codebox" ao invés de "code" para postar os códigos!

Edited by bruce845

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this