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

duvidas na funçao strtok em c

Discussão em 'Programação' iniciada por caprr, 10 de Abril de 2004. (Respostas: 13; Visualizações: 10287)

  1. caprr

    caprr Power Member

    viva

    como neste momento nao tenho meios para comunicar com o portatil, que é onde vou fazendo umas coisitas em c decidi expor a minha situação com fotos :lol: :lol:

    entao aqui vai:

    o programa é simples, e é so para testar a função strtok para a sua utilização em programas mais compostos...

    pelo que li no man sa função a primeira invocação deve ter o nome da string e nas sucessivas deve la constar NULL, isto no 1 parametro da função e mo segundo deve ter uma string com os caracteres separadores...

    imagem1 ( programa)

    imagem2 (shell depois da execução do programa)

    o que pretendo é que o nome seja introduzido com o espaço como separador e que depois imprima o 1 o 2 nome...
    mas como da para ver na imagem 2 este dá NULL....

    presumo que eu esteja não esteja a perceber bem a função....


    alguem da uma ajudita.....

    as fotos nao estao grande coisa mas se nao der para perceber digam que eu vejo o que posso fazer
     

    Ficheiros Anexados:

    • imagem.JPG
      imagem.JPG
      File size:
      27,6 KB
      Visualizações:
      89
  2. caprr

    caprr Power Member

    viva

    acabei agora de experimentar da seguinte maneira


    char *pal[], *p;int N;

    .....
    scanf("%s",nome);
    ...
    N=0;
    p=strtok(nome," espaço");
    while((p!=NULL)&&(N<4)
    {
    pal[n]=pts;
    N++;
    pts=strtok(NULL,"space");
    }
    printf(" 1 nome %s\n",pal[0]);
    printf(" 1 nome %s\n",pal[1]);
    ...

    e na shell o 1 nome aparece ok e o 2 aparece a branco...
    a diferença desta soluçao para a anterior é que desta vez o 2 nome já nao aparece NULL
    ou seja esta solução tb nao é a correcta..

    como é que deverei utilizar esta funçao para separar os nomes....???

    como já é um pouco tarde amanha começo por fazer um pequeno debug( recorrendo aos printf's) para tentar ver o que se passa, mas nao estou a ver mais nenhuma solução...

    fiquem bem
     
  3. fap

    fap Power Member

    por acaso o strtok é uma coisa que é muito raro usar...mas vê lá se com este exemplo consegues perceber:

    Código:
    #include <string.h>
    #include <stdio.h>
    int main(){
    
       char frase[64]; 
       char *token = NULL;
       strcpy( frase, "o sporting ainda vai ser campeao portugues" );
       token= strtok( frase, " " );
        while( token )
        {
            printf("%s\n",token);
            token = strtok( NULL, " " );
                                       
        }
        /* resto do prog... */
    }
    
    o resultado vai ser
    o
    sporting
    ainda
    vai
    ser
    campeao
    portugues

    vê lá se é isto que queres...
    cumps,

    edit: não percebo porque é que os imports string.h e stdio.h nao aparecem...enfim... :confused:
     
  4. Madril

    Madril 1st Folding then Sex

    Tou a ver k segues os caminhos do teu pai :D
    Mas tas enganado ... bai ser o meu FCP :P
     
  5. caprr

    caprr Power Member

    viva


    fap:

    se substituires a strcpy por um scanf ou um fscanf, o resultado volta a ser o mesmo dos meus exercicio, mas se usares um gets o resultado já é asquele que pretendemos....


    por que será que com o scanf e fscanf so o 1 nome aparece...???


    fiquem bem
     
  6. fap

    fap Power Member


    só por curiosidade, tenta fazer com o scanf formatado da seguinte forma e depois diz se funcionou ou não
    Código:
    scanf(" %s", frase);
    
    repara no espaço entre a " e o %...
     
  7. caprr

    caprr Power Member

    viva

    fap: da maneira que dizes nao dá!!!porque será que lendo do stdin com o scanf nao se consegue depois alterar????

    a unica maneira que consigo é com o gets ( anexo), isto lendo os dados do stdin...
    agora em ficheiros binarios acho que o fscanf funciona perfeitamente, ja o utilizei para ai á umas 3 semanas, mas acho que nao deu problemas...
     

    Ficheiros Anexados:


  8. Boas, entao e se eu so quiser o campo "sporting" em vez de os valores todos?


    :eek:
     
  9. Baderous

    Baderous Banido

    Usas uma variável para contar quantos tokens já separaste.
     
  10. m00s

    m00s Power Member

    ou comparar o token com "sporting"...
     
  11. Obrigado, já consegui com 2 token, separei em 2 e depois outra vez em 2 para ficar so com a parte que queria. :D
     
  12. Strtok

    Boas, tenho uma pequena duvida:

    -tenho uma string para enviar para um nodo de uma lista ligada mas aparece-me "23 e só quero o 23. Como posso fazer?

    Cumprimentos
     
  13. no-comments

    no-comments Power Member

    Copias para uma nova variável os 2 últimos caracteres. Mas isso é uma solução pobre para o problema.

    Coloca código para vermos o problema.
     
  14. Elemento* inserefimElemento(Elemento *L, char c[1024]){
    Elemento *aux = L, *nv;
    char *token = NULL;
    int i=0,n;
    float f;
    nv=makeElemento();
    token= strtok(c, "," );
    while(token){
    if(i==0){
    printf("%s\n",token);
    n=atoi(token);
    nv->numatom=n;
    }
    if(i==1){
    f=atof(token);
    nv->nummassa=f;
    }
    if(i==2)
    strcpy(nv->nome,token);
    if(i==3)
    strcpy(nv->simbolo,token);
    token = strtok( NULL, "," );
    i++;
    }
    nv->nseg=NULL;
    if(L==NULL)
    return nv;
    while(aux->nseg != NULL)
    aux=aux->nseg;
    aux->nseg=nv;
    return L;
    }

    No primeiro token queria só passar o valor inteiro, o problema e que estou a ler a partir de um ficheiro excel e aparecem-me as aspas
     

Partilhar esta Página