Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
carlos20030

C Separar palavras de uma frase

Recommended Posts

Olá,

 

Gostaria de saber como posso separar as palavras de uma frase lida e armazená-las em outro vetor. Ex:

1) Li uma string de determinado tamanho:

"Eu fui ao baile"

2) Agora separo a frase em 4 palavras e armazeno em um vetor qualquer:

vetor[0] = Eu
vetor[1] = fui
vetor[2] = ao
vetor[3] = baile

Só posso utilizar funções presentes na string.h e não posso utilizar ponteiros.

 

Att.

Editado por Simon Viegas
Inserir tag CODE
  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

@carlos20030         você precisa colocar um laço de repetição começando de zero e indo até o final da string usando o comando strlen(string)   e vai testando cada caractere da string,  e se não for espaço coloque esse caractere no vetor na primeira posição,  e se for espaço então mude para a próxima posição do vetor ,use uma variável para isso ,   com isso o laço vai se repetir até termina de ler a string e as palavras estarão nas posições do vetor .

   porém não podemos te dar o código pronto pois é contra as regras do fórum ,  então faça do jeito que você souber, mesmo que contenha erros, e poste aqui para podermos ver como está e em que podemos ajudar .

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
  • Autor do tópico
  • @devair1010 Do jeito que você falou, eu tentei o seguinte:

    #include <stdio.h>
    #include <string.h>
    
    int main(){
    	
    	char string[100], vetor[100];
    	int i,j = 0;
    	
    	fgets(string, 10000, stdin);
    	for(i = 0; i < strlen(string); i++){
    		if(string[i] == ' '){
    			j++;
    		}else{
    			vetor[j] = string[i];
    		}
    	}
    	
    
     	printf("%c", vetor[0]);
    	
    	return 0;
    }

    Porém, ao acessar a posição 0 do vetor,  da frase "ola mundo", ele imprime somente "a" (quando deveria imprimir a primeira palavra que eu digitei "ola").

    Editado por carlos20030
    • Curtir 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
    2 horas atrás, carlos20030 disse:

    Olá,

     

    Gostaria de saber como posso separar as palavras de uma frase lida e armazená-las em outro vetor. Ex:

    1) Li uma string de determinado tamanho:

    "Eu fui ao baile"

    2) Agora separo a frase em 4 palavras e armazeno em um vetor qualquer:

    vetor[0] = Eu

    vetor[1] = fui

    vetor[2] = ao

    vetor[3] = baile

     

    Só posso utilizar funções presentes na string.h e não posso utilizar ponteiros.

    Att.

    Dessa forma que você quer não é possível. Uma string é um vetor de caracteres, ou seja, cada posição desse vetor só pode corresponder a um único caractere, por exemplo:

    //String: Testando
    char string[15];
    string = "Testando";
    //string[0] = "T";
    //string[1] = "e";
    //string[2] = "s";
    //string[3] = "t";
    //string[4] = "a";
    //string[5] = "n";
    //string[6] = "d";
    //string[7] = "o";

     

    • Curtir 1
    • Triste 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • Realmente não há nenhuma forma de fazer isto?

    • Curtir 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    @carlos20030    muito bom, você entendeu o que eu disse e fez certo , mas  ficou faltando  colocar mais duas variáveis para controlar os caracteres dento do vetor, então seu código ficaria assim :

    #include <stdio.h>
    char string[50];   /* uma frase de ate 50 caracteres */  
    char vetor[50][30];/* cinquenta palavras de ate 30 caracteres cada */
    int i,j,Npalavras,k;
    int main(){
        Npalavras=1;
        /*strcpy(string,"eu fui ao baile");*/
        printf("Digite Uma Frase De No Maximo 50 Caracteres");
        gets(string);
        for(i=0;i<strlen(string);i++){
            if(string[i]!=' '){
                vetor[j][k]=string[i];
                k++;
            }
            else{
                j++;
                k=0;
                Npalavras++;
            }
        }
        printf("\nO Texto Teve %d Palavras\n\n",Npalavras);
        for(i=0;i<Npalavras;i++){
            printf("O Que Esta Armazenado Na Posicao %d Do Vetor => %s\n",i,vetor[i]);
        }
        return 0;
    }

     

    • Curtir 1
    • Obrigado 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • O código corrigido que você mandou compila sem erros, porém não executa. :(

    • Curtir 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    @carlos20030    aqui está compilando e funcionando normal,  veja se você copiou todo o código ,  e você está usando qual compilador ?    eu uso o code blocks versão 16.01 .

    Editado por devair1010

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • Eu uso o dev em sua versão mais atualizada. Eu consegui executá-lo setando as variáveis j e k para zero lá no inicio do programa, mas o resultado está saindo com alguns caracteres especiais:
     

    Citação

     

    Digite Uma Frase De No Maximo 50 Caracteres:ola mundo

    O Texto Teve 2 Palavras

    O Que Esta Armazenado Na Posicao 0 Do Vetor => ola±w
    O Que Esta Armazenado Na Posicao 1 Do Vetor => mundo
    ìn

     

     

    • Curtir 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • agora, devair1010 disse:

    @carlos20030   experimente colocar o include string, pode ser por isso .

    
    #include <string.h>

     

    Já havia tentado. Tentei ler com fgets também e os caracteres estranhos continuam a aparecer.

    • Curtir 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    @carlos20030      testei aqui no dev c++ 4.9.9.2  e funciona bem não apresentou esses caracteres diferentes não .

    • Triste 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
    58 minutos atrás, devair1010 disse:

    @carlos20030    muito bom, você entendeu o que eu disse e fez certo , mas  ficou faltando  colocar mais duas variáveis para controlar os caracteres dento do vetor, então seu código ficaria assim :

    
    #include <stdio.h>
    char string[50];   /* uma frase de ate 50 caracteres */  
    char vetor[50][30];/* cinquenta palavras de ate 30 caracteres cada */
    int i,j,Npalavras,k;
    int main(){
        Npalavras=1;
        /*strcpy(string,"eu fui ao baile");*/
        printf("Digite Uma Frase De No Maximo 50 Caracteres");
        gets(string);
        for(i=0;i<strlen(string);i++){
            if(string[i]!=' '){
                vetor[j][k]=string[i];
                k++;
            }
            else{
                j++;
                k=0;
                Npalavras++;
            }
        }
        printf("\nO Texto Teve %d Palavras\n\n",Npalavras);
        for(i=0;i<Npalavras;i++){
            printf("O Que Esta Armazenado Na Posicao %d Do Vetor => %s\n",i,vetor[i]);
        }
        return 0;
    }

     

    Excelente ideia, compilei usando o Code Blocks e funcionou perfeitamente.

    Editado por Simon Viegas
    Separar citação do comentário
    • Curtir 2

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Olá a todos.

     

    Testei no Dev-C++ 5.11 e funcionou normal também.

     

    Mas observação: Aqui é C++, será que não tem diferença para o C?

    • Curtir 2

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    @Simon Viegas    sim , creio que no c++ seja diferente, mas o @carlos20030  postou como   c   e no codeblocks eu fiz como c  mesmo, quer dizer coloquei apenas os comandos do c, como printf que tem  no c e c++ ao invés de usar cout que só tem no c++, no entanto o manuseio de string  provavelmente seja diferente mesmo .

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Crie uma conta ou entre para comentar

    Você precisar ser um membro para fazer um comentário






    Sobre o Clube do Hardware

    No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

    Direitos autorais

    Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

    ×