Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

guilhoto

split de palavras duma string

Mensagens Recomendadas

guilhoto

boa noite. gostava de saber se alguem me podia ajudar a fazer uma funcao que guarde numa tabela as palavras duma string

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pmg

Eu posso!

1) podes definir a funcao com os parametros que quiseres?

Sugiro (com uma definicao adequada da struct TableItem)

// esta funcao devolve o numero de palavras em input
// esse valor nunca sera maior que maxitem
// as palavras encontradas sao guardadas na tabela
size_t guarda_palavras(struct TableItem *tabela, size_t maxitems, const char *input);

2) é a tua vez ...

Editado por pmg

What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
guilhoto

eu estava a pensar mais numa assim...

#define MAXLINESIZE 1026
#define NUMSEP 9
const char separators[] = { ' ','\t',',',';','.','?','!','"','\n' };
void split(char *line){
        int i, j, k;
        char buffer[MAXLINESIZE];
        for(i = 0, k = 0; line[i] != '\0'; i++, k++) {
                    buffer[k] = tolower(line[i]);
                    for(j = 0; j < NUMSEP; j++) {
                                if(line[i] == separators[j]) {
                                        if(k != 0) {
                                            buffer[k] = '\0';
//falta-me qualquer coisa aqui mas nao estou bem a ver o que...
                                            }
                                            k = -1;
                                }
                    }
        }
}

o objetivo da funcao e quando eu recebo um texto com varias linhas no maximo de 1026 caracteres conseguir separar as palavras..

Editado por pmg
GeSHi

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
guilhoto

aux[contador] = (char*)malloc(sizeof(char)*1026);
strcpy(aux[contador],buffer);
contador++;

acho que era isto que me faltava...com isto penso ja dar bem porque ja guardo em cada posicao da tabela aux uma palavra...

Editado por pmg
GeSHi

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
HappyHippyHippo
#include <stdlib.h>
#include <stdio.h>
#include <string.h>

#define SIZE 100

int my_split(char words[size][size], const char * line) {
char * token = NULL;
char * buffer = malloc(strlen(line)  + 1);
size_t i = 0;

strcpy(buffer, line);

token = strtok(buffer, " \t,;.?!\"\n");
while (token != NULL) {
	strcpy(words[i], token);
	i++;

	token = strtok(NULL, " \t,;.?!\"\n");
}

free(buffer);

return i;
}

int main() {
char words[size][size];
size_t i = 0, count = 0;

count = my_split(words, "O rato roeu a rolha da garrafa de rum do rei da russia");

for (i = 0; i < count; i++) {
	printf("%s\n", words[i]);
}

return 0;
}


IRC : sim, é algo que ainda existe >> #p@p

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pmg

aux[contador] = (char*)malloc(sizeof(char)*1026);

acho que era isto que me faltava...

Não te esqueças de libertar a memória quando já não precisares dela.

Todos os malloc's devem ter um free() associado!


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Partilhar esta mensagem


Ligação 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

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.