Publicada por aazevedo1984 em 18/05/2007 - 16:09h:
* aazevedo1984 usa Slackware

Como faco p/ dividir uma string em C por exemplo o usuario digita a frase "viva o linux", eu quero q a primeira variavel receba "viva" a segunda "o" e a terceira "linux", mas esta frase tem q ser passada enquanto o programa esta rodando. Alguem sabe como dividir strings e passa-las a outras variaveis?

  
 
Resposta de code0 em 18/05/2007 - 19:25h:
* code0 usa Slackware
* code0 tem conceito: 7.8
 


No exemplo "viva o linux" o delimitador de partes utilizado e o espaco.
Escaneie a string de entrada transferindo para a variavel q vc quer ate encontrar o espaco...

// assumindo str[] contendo "viva o linux"
char *tmp;
char var1[32], var2[32], var3[32];

tmp=str;
while(*tmp!=' ') {
var1[tmp-str]=*tmp;
tmp++;
}
var1[tmp-str]='{RESPOSTA}';
printf("Parte 1 -> %s\n",var1);

Ao final do loop var1 deve conter "viva"





 
Resposta de removido em 19/05/2007 - 01:37h:
* removido usa Nenhuma
* removido tem conceito: nenhum voto.
 


pequisei por funções que façam isso automaticamente e não encontrei então fiz um codigo de exemplo o que você deve fazer é ler o texto de stdin e depois interpreta-lo caractere a caractere utilizando como quebra os separadores fiz um exemplo para voce entender melhor:

http://www.0xnerd.com/separador.c

se tiver alguma duvida pode mandar um email!

 
Resposta de aazevedo1984 em 24/05/2007 - 11:11h:
* aazevedo1984 usa Slackware
* aazevedo1984 tem conceito: nenhum voto.
 


Obrigado pelas dicas, foram de grande ajuda, mas depois q fiz o trabalho achei uma funcao chamada sscanf q deixa eu passar uma string e dividi-las pelo espaco, por exemplo


char frase[20] = "viva o linux";
char s1[10],s2[10],s3[10];
sscanf(frase,"%s%s%s",s1,s2,s3);

Aq funcionou, mas ainda estou quebrado cabeca com novos problemas, procurei livros do tipo "biblia", mas nao achei, so encontrei livros basicos e falando muito pouco, nao ha nada mais completo em livros? se tiver vcs sabem o nome e onde encontra-los?

 
Resposta de paulopugin em 30/10/2008 - 21:34h:
* paulopugin usa Debian
* paulopugin tem conceito: nenhum voto.
 


estou com o mesmo problema,
você conseguiu resolver??

 
Resposta de code0 em 31/10/2008 - 11:48h:
* code0 usa Slackware
* code0 tem conceito: 7.8
 


Vejamos.....

#include <stdio.h>

#define STR "VIVA O LINUX{RESPOSTA}" // 13 chars

char * my_instr(char *from,char *to,char delim);

int main(void) {
char var[32];
char v1[32];
char v2[32];
char v3[32];
char * ptr;

sprintf(var,"%s", STR);
ptr=my_instr(var,v1,' ');
ptr=my_instr(ptr,v2,' ');
ptr=my_instr(ptr,v3,' ');
fprintf(stdout,"String %s\n",STR);
fprintf(stdout,"Parte 1 %s\n",v1);
fprintf(stdout,"Parte 2 %s\n",v2);
fprintf(stdout,"Parte 3 %s\n",v3);
}

// char * my_instr(char *from,char *to,char delim)
// Copia string de from para to ate encontrar delim
// Nao copia delim
// Retorna endereco em from, proximo byte apos delim
char * my_instr(char *from,char *to,char delim) {
while(*from!=delim && !from!='{RESPOSTA}') {
*to=*from
from++; to++;
}
return from+1;
}

Eu nao testei, provavelmente deve ser necessario efetuar algum ajuste. Mas basicamente e isto.

 
Resposta de removido em 08/02/2009 - 20:39h:
* removido usa Nenhuma
* removido tem conceito: nenhum voto.
 


nossa senhora, cada um fez um malabarismo diferente

int main(int argc,char *argv[]) {
   int x;
   for (x=1;x<argc;x++) {
      printf("string %i -> %s\n",argc,argv[x]);
   }
}

$ ./c viva o linux
string 1 -> viva
string 2 -> o
string 3 -> linux


c já é difícil pra que complicar mais?

  


ATENÇÃO: Antes de contribuir com uma resposta, leia o artigo Qualidade de respostas e certifique-se de que esteja realmente contribuindo com a comunidade. Muitas vezes o ímpeto de contribuir nos leva a atrapalhar ao invés de ajudar.

Contribuir com resposta



CAPTCHA
[ Recarregar imagem ]

Digite o código acima:

  
* Nota: só é possível enviar respostas usuário que possui conta e esteja logado com ela, caso contrário sua mensagem será perdida.