1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

[AJUDA] guardar string em estrutura do C

Discussão em 'Programação' iniciada por wiz_pedro, 4 de Maio de 2006. (Respostas: 7; Visualizações: 3545)

  1. Boas,

    Estou aqui com um dilema>( !!!
    Num trabalho em C, preciso de dada uma string guardar as suas componentes numa estrutura do tipo:
    ----------------------------
    typedef struct sObj {
    int num;
    char frase[100][100];
    }
    ----------------------------
    ...em que:
    "num" -> representa o numero de palavras da frase
    "frase" -> é uma matriz na qual vou guardar em cada linha uma palavra.

    O problema é k por vezes as palavras estão separadas por ' ' (espaços) ou por ',' (virgulas).


    Não estou a conseguir fazer isto... :(
    Alguma ideia de como o fazer?

    Agradeço desde já toda a ajuda que possa vir a ter.
     
  2. TuxBoss

    TuxBoss Power Member

    Usa um tokenizer com espaços e virgulas como delimitadores.
    man strtok ou google "man strtok". (ha uma versão segura mas não me lembro qual é o nome da função).
     
  3. PrOdG

    PrOdG Power Member

    O strtok é deprecated porque modifica a string original, a função a que te referes é strsep ;)
     
  4. isso e complicado....
     
  5. Eu diria que tens que usar ponteiros...
     
  6. MAdKulhas

    MAdKulhas Power Member

    Ou seja, no trabalho tens que analisar aquando da ocorrência de uma mudança de linha causada por um "\n" (new line)?

    Se for esse o caso, identificas o caracter da string na posição e comparas se é algum dos caracteres que fazem parte de por exemplo, critérios guardados numa string. Ou simplesmente fazes 2 "if" e comparas com ',' e ' '.

    Enquanto não atingires um "\n", comparas o caracter na posição e se este for um espaço ou uma virgula, fazes o incremento do numero de palavras. Hás de reparar que a contagem das palavras também pode ser contada consoante o numero de espaços. Mas terás também que verificar a condição que depois de uma virgula, pode existir um espaço. Isto para a contagem.

    Podes depois é que quando encontras um "\n", fazes algo assim:

    Código:
     
    [b]Algoritmo[/b]
     
    ...
     
    Se caracter na posicao [i] == "\n"
        Mudar de linha frase[i][j] => incrementando o [j] se não estou em erro
     
    ...
    
    Espero ter dado umas luzes :001:
     
    Última edição: 15 de Maio de 2006
  7. inginheiiro

    inginheiiro Power Member


    Código:
    #include <stdio.h>
    #include <string.h>
    
    int main ()
    {
      char str[] ="toda a gente manda bitaites e ninguem resolve problema nenhum.";
      char delimiters[] = " ,;"; // Separadores ...
      char * pch;
      printf ("Separar a string  \"%s\" em tokens:\n",str);
      pch = strtok (str,delimiters);
      while (pch != NULL)
      {
        printf ("%s\n",pch);
        pch = strtok (NULL, delimiters);
      }
      return 0;
    }
    Espero ter ajudado.
    /Ing
     
  8. Problema Resolvido

    Brigado a todos...ja consegui!!!

    Inicialmente estava a usar o strtok e o strsep...

    Mas acabei por fazer eu uma função que fizesse o k eu keria usando ciclos for condicionados (foi como reinventar a roda)
    :-D

    Mas bem, obrigado a todos pela ajuda!!
     

Partilhar esta Página