duvidas na funçao strtok em c

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
 

Anexos

  • imagem.JPG
    imagem.JPG
    27,6 KB · Visualizações: 90
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
 
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:
 
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
 
caprr disse:
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


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

Anexos

  • Fotografia 5.jpg
    Fotografia 5.jpg
    39,8 KB · Visualizações: 33
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:


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


:eek:
 
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
 
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
 
Back
Topo