Ir para conteúdo
Fórum Script Brasil
  • 0

Manip String


njsf1

Pergunta

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

Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 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);
}

Link para o comentário
Compartilhar em outros 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

Link para o comentário
Compartilhar em outros 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.

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...