• 0
Sign in to follow this  
njsf1

Manip String

Question

alguém me ajude aí por favor.

como é que eu faco uma funcao que leia uma string dada pelo usuario , separa as palavras dessa string e bota cada palavra num ponteiro, numa lista encadeada???? bem, fiquei aqui tentando mas eu fiz um programa que da erro em algumas instancias de entrada. é pro trabalho aqui da facul eheh.eu fz isso aqui mas não está muito bom não.

#include<stdio.h>

#include<ctype.h>

#include<malloc.h>

typedef struct str_palavra{

int linha;

char palavra[30];

struct str_palavra *prox;

} regpalavra, *apontpalavra;

apontpalavra inifilap,fimfilap;

void inserepalavranop(char sl[51],int c){

apontpalavra tmp;

int cont,r;

cont=0;

printf("teste");

while((cont<=50)&&(sl[cont])){

if(isalpha(sl[cont])){

tmp=malloc(sizeof(regpalavra));

tmp->linha=c;

r=0;

while(isalpha(sl[cont])){

tmp->palavra[r]=sl[cont];

r++;

cont++;

}

if (!inifilap){

inifilap=tmp;

fimfilap=tmp;

}

else{

fimfilap->prox=tmp;

fimfilap=tmp;

}

}

else cont++;

}

}

int main(void){

char sl[51];

int n,c;

scanf("%d",&n);

inifilap=fimfilap=NULL;

for(c=1;c<=n;c++){

scanf("%s",sl);

inserepalavranop(sl,c);

}

printf("%d",fimfilap->linha);

printf("%s",fimfilap->palavra);

}

opa, quando copiei ficou tudo alinhado à esquerda. deixa pra lá.

Share this post


Link to post
Share on other sites

3 answers to this question

Recommended Posts

  • 0

testei seu programa e aparentemente funciona normal,

voce poderia dizer que erros são esses que ocorrem com algumas instancias de entrada

o que fiz aqui nesse script foi reduzir um pouco o tamanho da funcao de insercao e criar uma funcao que mostra a lista,

#include<stdio.h>
#include<ctype.h>
#include<malloc.h>
typedef struct str_palavra{
     int linha;
     char palavra[30];
     struct str_palavra *prox;
} regpalavra, *apontpalavra;
apontpalavra inifilap,fimfilap;

void inserepalavranop(char sl[51],int c){
     apontpalavra tmp;
// insercao dos valores em tpm
     tmp=malloc(sizeof(regpalavra));
     tmp->linha=c;
     sprintf(tmp->palavra,"%s",sl);
     if (!inifilap){
          inifilap=tmp;
          fimfilap=tmp;
     }
     else{
          fimfilap->prox=tmp;
          fimfilap=tmp;
     }
     //printf("inteiro: %i, string %s\n",inifilap->linha,inifilap->palavra);
     //printf("inteiro: %i, string %s\n",fimfilap->linha,fimfilap->palavra);
}

void mostralista(apontpalavra lista){
     apontpalavra temp;
     temp=lista;
     while(temp) {
          printf("Lista n=%i contendo: %s\n",temp->linha, temp->palavra);
          temp=temp->prox;
     }
}


int main(void){
     char sl[51];
     int n,c;
     printf("Digite quantidade de elementos da lista\n");
     scanf("%d",&n);
     inifilap=fimfilap=NULL;
     for(c=1;c<=n;c++){
          scanf("%s",sl);
          inserepalavranop(sl,c);
     }
     mostralista(inifilap);
}

Share this post


Link to post
Share on other sites
  • 0

o erro é:

se voce pedir 2 entradas de string e botar uma palavra que contenha espaço, tipo: (a mesa) ele está contando como duas strings, ele não pede pra gente dar a entrada duas vezes, não sei o que acontece.

valeu, obrigado aí pela atencao mas ainda acho que meu programa está errado. eheh.

bem na verdade eu queria que fosse tipo assim:

o cara digita 2 daí

entra com (a mesa) e depois (o carro);

aí vinha quatro ponteiros(pras 4 palavras)

1º pon -linha1 -a -inifilap

2º pon -linha 1 -mesa

3º pon -linha 2 -o

4º pon -linha 2 -carro -fimfilap

Share this post


Link to post
Share on other sites
  • 0

entendi

não vou deixar prontinho, vou te dar as dicas ;)

     for(c=1;c<=n;c++){
          scanf("%s",sl);
          inserepalavranop(sl,c);
     }

nesse trecho voce le a string

o que separa uma palavra de outra?

é o espaco " " certo?

então voce passa caracter por caracter da sua string em busca de um espaco,

e qual o limite? onde voce deve parar?

voce deve parar quando encontrar o caracter que indica fim de string "\0"

se eu não encontro espaco, chamo a funcao de insercao para aquela string

se eu acho espaco, devo separar o que tenho antes do espaco do resto da string

para isso voce pode memorizar onde comeca a string.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this