Ir para o conteúdo
citadp

Separar strings

Mensagens Recomendadas

citadp

Olá!

Estou a fazer um programa eu que o utilizador tem que meter várias opções para correr.

Se ele puser o comando "copiar ficheiro pasta",

aux = strtok (NULL, " ");
strcat(funcao," ");
strcat(funcao,aux);
if (strcmp ( funcao, "copiar ficheiro" ) == 0 ) {
pasta = strtok(NULL, "\n");

Estava a fazer isto para ele ver a palavra ficheiro, mas não consigo!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pmg

Hmmm ... o "ficheiro" não deve ser o nome dum ficheiro existente (ou não) no disco? É sempre a string "ficheiro"?

copiar artigo_tres.txt pasta

copiar receita_iogurte.pdf receitas

Qual foi a string que usaste no primeiro strtok()?

Quais foram as alterações anteriores à variavel funcao?

Eu suspeito que estás a usar função para duas coisas incompativeis: tanto para o strtok() como para (re-)construires uma string.

A função strtok() altera a string inicial. Não podes estar a chamar strtok() e a alterar a string "por fora" ao mesmo tempo ...


What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
citadp

Sim, é uma string.

Mas se eu fizer o comando, só por exemplo:

copiar x ficheiro.txt // copiar 1 vez

A minha questão é, como é que eu faço para ele ver o espaço entre o comando copiar e o x.

Eu só para o codigo copiar x tinha:

funcao = strtok ( input, "\n" );

Ou seja quando houvesse um enter ele fazia o comando copiar x.

Agora queria que ele visse o espaço entre copiar e o x, e o x e ficheiro.txt.

Não se me estou a fazer entender.

Cumps

Ana

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
pmg

Podes usar dois ou mais caracteres no strtok() ao mesmo tempo.

Imagina que usas os caracteres ESPACO, TAB, e ENTER todos ao mesmo tempo.

Podes fazer o teu programa assim?

strcpy(input, "ls\n");
strtok(input, " \t\n"); // "ls"
strtok(NULL, " \t\n"); // NULL

strcpy(input, "ls -l\n");
strtok(input, " \t\n"); // "ls"
strtok(NULL, " \t\n"); // "-l"
strtok(NULL, " \t\n"); // NULL

strcpy(input, "copiar x ficheiro.txt\n");
strtok(input, " \t\n"); // "copiar"
strtok(NULL, " \t\n"); // "x"
strtok(NULL, " \t\n"); // "ficheiro.txt"
strtok(NULL, " \t\n"); // NULL

Ou seja, o primeiro strtok() (com a string no primeiro argumento) identifica a primeira palavra, os strtok()s seguintes (com NULL no primeiro argumento) identificam a palavra seguinte ou devolvem NULL caso não hajam mais palavras.

Editado por pmg

What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.