嘿,我在尝试解析字符串时遇到问题。 我的程序可以接收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);
我想将字符串解析为三个变量。
答案 0 :(得分:0)
让我为您提出另一种方法,使用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;
}