如何使用sscanf()解析此行文本?

时间:2019-03-01 11:41:27

标签: c string parsing scanf

我要分析此行文本,例如:“ 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);

我的格式有问题吗?

1 个答案:

答案 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 */
}