Ir ao conteúdo

Problema para guardar os valores depois de usar a STRTOK


rafael.a.faria

Posts recomendados

Postado

Eu to fazendo um programa que deve ler um texto e pegar todas as palavras e dizer quantas vezes cada palavra se repete e cada linha, mas estou com problema já no começo ao guardar as palavras.

Eu executo o programa da seguinte forma ./a.out <teste> saida

o arquivo teste contém o seguinte texto

"este é, um pequeno:

com. varios:

simbolos?"

meu código é

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

typedef struct{
char *plv;
unsigned short int repet[500];
}PALAVRA;

void main(){
char *n, m[1000], *k;
unsigned short int i=0, j=0;
PALAVRA dic[1000];

while(gets(m)){
dic[i].plv = strtok(m, " ,.;:?!");
if(dic[i].plv)
printf("%d - %s\n", i, dic[i].plv);
while(dic[i].plv){
i++;
dic[i].plv = strtok('\0', " ,.;:?!");
if(dic[i].plv)
printf("%d - %s\n", i, dic[i].plv);
}
}
puts("\n\n******************************************************\n\n");

for(j=0; j<i; j++)
printf("%d - %s\n", j, dic[j].plv);

}

No arquivo de saida a parte de baixo deveria ser igual a de cima, mas ele sai assim


0 - este
1 - é
2 - um
3 - pequeno
4 - teste
5 - com
6 - varios
7 - simbolos


******************************************************


0 - simbolos
1 - los
2 -
3 - arios
4 - simbolos
5 - os
6 - varios
7 - simbolos

Eu já entendi que o problema é que ele esta guardando o endereço dentro de m e nao o valor, mas não sei como fazer para guardar esse valor,

Alguém pode me ajudar???

Postado

Rafael,

Montei um exemplo para você ter uma ideia. Uma boa alternativa também seria com alocação dinâmica.

Para testar, a entrada padrão ficou sendo o teclado, e a cada Enter ele passa para o próximo gets() (nova linha). Para encerrar, use CTRL-Z + Enter (= fim de arquivo), supondo que esteja no Windows.

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

void lista_plv(char vet[][1000], int p, int li)
{
int i;

for (i = 0; i < p; i++)
printf("Linha %d - %s\n", li, vet[i]);
}

int main()
{
char *n, m[1000];
char arr[1000][1000];
unsigned int l, i;

i = 0;
l = 0;
while (gets(m))
{

n = strtok(m, " ,.;:?!");

if (n)
{
strcpy(arr[i], n);
i++;
}

while (n)
{
n = strtok(NULL, " ,.;:?!");
if (n)
{
strcpy(arr[i], n);
i++;
}
}

lista_plv (arr, i, l);
i = 0;
if (m[0] != '\0') l++;
}

return 0;
}

Espero que ajude..

[]'s

LNW

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

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...