Ir ao conteúdo
  • Cadastre-se

C Separar palavras de uma frase


carlos20030

Posts recomendados

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.

  • Curtir 1
Link para o comentário
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
Link para o comentário
Compartilhar em outros sites

@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").

  • Curtir 1
Link para o comentário
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
Link para o comentário
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
Link para o comentário
Compartilhar em outros sites

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
Link para o comentário
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.

  • Curtir 2
Link para o comentário
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 .

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades 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

×
×
  • Criar novo...