我怎样才能解析以下字符串
空(1)
空(20)
我尝试了以下但总是失败
int count;
sscanf(buf, "%*s(%d)", &count)
提前致谢!
答案 0 :(得分:2)
更改为
sscanf(buf, "%*[^(](%d", &count);
答案 1 :(得分:0)
sscanf总是以你给出的格式阅读。
您的测试字符串为空(1)但在sscanf中使用了sscanf(buf, "%*s(%d)", &count)
通过这种方式,你试图将“empty”复制到count,这将永远失败,因为你不能将字符串赋值给int。
做类似的事情,
int count;
char s[20];
sscanf(buf, "%*s(%d)",s, &count)
答案 2 :(得分:0)
如果文本总是“空(某些int )”,那么
int count;
int n=0;
if (sscanf(buf, "empty(%d)%n", &count, &n) == 1) && (n > 0)) Success();
sscanf()
会将char
与char
匹配(虽然白方处理方式不同),直到达到"%d"
,然后它会尝试匹配int
。继续扫描,将char
与char
匹配,直到"%n"
将扫描的char
计数保存到n
。
测试返回值对1(扫描的1个参数,%n args没有贡献)并且看到n
不再为0,扫描已知完全完成。
如果需要代码以确保没有额外,则可以使用
if (sscanf(buf, "empty(%d)%n", &count, &n) == 1) && (buf[n] == '\0')) Success();