• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

oldskool

Separar uma frase - string - em palavras

10 mensagens neste tópico

Boas pessoal, será que alguém me podia ajudar com isto??

O objectivo é ler a string e separá-la em palavras. Não percebo onde está o erro até pq qd compilo o erro q da é do windos a perguntar se qr enviar relatório de erros :confused:

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

void main(){
char *word, *sentence;
int i, j = 0;
puts("Sentence: ");
gets(sentence);
for(i=0;i<=strlen(sentence);i++){
	while(sentence[i] != '\0'){
		while(sentence[i] != ' '){
			word[j]=sentence[i];
			j++;
		}
		printf("%s ",word);
		j=0;
	}
}
}

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

é de mim, ou não alocaste espaço para as strings?

e já agora, usa as tags 'code'.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

podiam me dizer como se faz isso??n tou a perceber a questao... eu qr q a string seja dinamica..

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Deve ser algo do género:

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

int main()
{
int i=0;
char cmd[100], *vec[256];
char *str;

strcpy(cmd," Isto e uma string separada por espaços");
cmd[strlen(cmd)-1] = '\0';
str = strtok(cmd," ");
vec[i] = (char *)malloc(sizeof(char)*256);
strcpy(vec[i], str);
        i++;
do{
	str = strtok(NULL," ");
	if(str != NULL) {
		vec[i] = (char *)malloc(sizeof(char)*256);
		strcpy(vec[i++], str);					
	}
}while(str != NULL);

        return 0;
}

Por acaso tinha um exemplo à mão, feito há um ou dois dias num exercicio. Não quer dizer que esteja certo porque não testei mas dá para teres uma ideia.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Deve ser algo do género:

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

int main()
{
int i=0;
char cmd[100], *vec[256];
char *str;

strcpy(cmd," Isto e uma string separada por espaços");
cmd[strlen(cmd)-1] = '\0';
str = strtok(cmd," ");
vec[i] = (char *)malloc(sizeof(char)*256);
strcpy(vec[i], str);
        i++;
do{
	str = strtok(NULL," ");
	if(str != NULL) {
		vec[i] = (char *)malloc(sizeof(char)*256);
		strcpy(vec[i++], str);					
	}
}while(str != NULL);

        return 0;
}

Por acaso tinha um exemplo à mão, feito há um ou dois dias num exercicio. Não quer dizer que esteja certo porque não testei mas dá para teres uma ideia.

esse n copia a primeira palavra, va-se la saber pq...n percebo pq incrementas o i antes do ciclo do while e tb tas a apagar o ultimo caracter da string igualando-o a '\0'

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

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

void main(){
char sentence[500], *word;
int ct=0;
puts("Sentence: ");
gets(sentence);
word = strtok( sentence , " " );
while( word != NULL ) {
	printf( "%sy ", word );
	word = strtok( NULL, " " );
	}
}

Entretanto consegui fazer assim, usando a biblioteca string.h.

agora vou dar uns toques para meter a sentence dinâmica...

obrigado pessoal!!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

já agora podiam me ajudar numa cena???!!! há alguma função tipo a strtok() mas q gravasse a string antes do caracter e gravasse também depois do caracter...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

nope, que eu saiba, standard, strtok() é tudo o que ha...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O código do Hipnoted funciona! ele retorna a primeira palavra tb!Só tens de alterar a linha cmd[strlen(cmd)] = '\0' porque se estiver a alterar a penultima posicao o programa apagava-m o último caracter!

Para testar usei:

for(j=0;j<i;j++)
 printf("%s\n", vec[j]); 

Cumps!

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora