如何使用sscanf()来解析这一行文本?

问题描述 投票:0回答:1

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

我的格式有问题吗?

c string parsing scanf
1个回答
1
投票

%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 */
}
© www.soinside.com 2019 - 2024. All rights reserved.