我有这个我要分析的文本行,例如:“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);
我的格式有问题吗?
%s
扫描直到空白字符(或EOF
)。
使用%[
格式说明符来解析您的字符串:
sscanf(text, "%[^,],%[^(](%[^)])", val1, val2, val3);
%[^,]
将扫描一切,直到,
,
将使用逗号,因为%[^,]
不会消耗它
%[^(]
将扫描一切,直到(
(
将消耗左括号,因为%[^(]
不会消耗它
等等
始终检查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 */
}