Jump to content
guilhoto

split de palavras duma string

Recommended Posts

guilhoto

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

Share this post


Link to post
Share on other 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 ...

Edited by 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!

Share this post


Link to post
Share on other 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..

Edited by pmg
GeSHi

Share this post


Link to post
Share on other 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...

Edited by pmg
GeSHi

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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!

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.