我要分析此行文本,例如:“ A,B(C10D)”,解析后,它应打印出类似以下内容的文本:
value 1: A
value 2: B
value 3: C10D
如您所见,我有两个定界符:一个逗号和左,右括号()。
这是我到目前为止编写的代码,借助Stack Overflow线程上的其他答案,但似乎不起作用...
char text[100] = "A,B(C10D)";
sscanf(text,"%s,%s(%s)",val1,val2,val3);
printf("Value 1: %s\n", val1);
printf("Value 2: %s\n", val2);
printf("Value 3: %s\n", val3);
我的格式有问题吗?
答案 0 :(得分:1)
%s
扫描直到空白字符(或EOF
)。
使用%[
格式说明符来解析您的字符串:
sscanf(text, "%[^,],%[^(](%[^)])", val1, val2, val3);
%[^,]
会扫描所有内容,直到 a ,
,
将使用逗号,因为%[^,]
将不使用逗号
%[^(]
会扫描所有内容,直到 a (
(
会消耗左括号,因为%[^(]
不会消耗左括号
等
始终检查sscanf
的返回值。 sscanf
返回成功读取和分配的参数数量。
int retVal = sscanf(text,"%[^,],%[^(](%[^)])", val1, val2, val3);
if(retVal == 3)
{
/* Scanned and assigned all three arguments successfully */
}
else if(retVal == EOF)
{
/* EOF was encountered */
}
else
{
/* Invalid input; parsing error */
}