Разобрать строку в несколько переменных - PullRequest
0 голосов
/ 28 марта 2019

Эй, у меня проблема с попыткой разобрать строки. Моя программа может получать 4 типа ввода:

s = "x=10+2;"
s = "x=10+y;"
s = "x=y+10;"
s = "x=y+z;"

Я имею в виду формат примерно такой: s = "(string)=(string)||(int)+(string)||(int);"

Я пытался использовать sscanf( s, "%c=%d+%d", &c, &v1, &v2 ) но мне нужно сначала проверить, какой это тип ввода.

char* s = "x=2+22;";
int v1, v2;
char* c;
sscanf( s, "%c=%d+%d", &c, &v1, &v2 );
printf("%s %d %d\n", c, v1, v2);

Я хочу разобрать строку до трех переменных.

1 Ответ

0 голосов
/ 28 марта 2019

Позвольте мне предложить вам другой способ, используя strsep и некоторые if условия, чтобы определить, являются ли символы целыми или строковыми, следующий код работает для всех ваших случаев

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
  char *token, *string, *var;
  char *str = "x=x+10;";
  int tmp1,tmp2;
  tofree = string = strdup(str);
  if (string == NULL)
    return -1;

  token = strsep(&string, "=");
  printf("%s\n", token);
  token = strsep(&string, "=");
  printf("%s\n", token);

  var = strsep(&token, "+");
  if( var[0] >= 0x60 && var[0] <= 0x7B ) // detect string
  {
    printf("str1 = [ %s ] \n", var);
  } else {    // else case will be an integer
    tmp1 = atoi(var);
    printf("int1 = [ %d ] \n ",tmp1);
  }

  var = strsep(&token, "+");
  var[strlen(var)-1]='\0'; // remove ";" 
  if( var[0] >= 0x61 && var[0] <= 0x7A )
  {
    printf("str2 = [ %s ] \n", var);
  }else{
    tmp2 = atoi(var);
    printf("int2 = [ %d ] \n ",tmp2);
  }

  return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...