【发布时间】:2021-03-14 21:41:39
【问题描述】:
我目前正在用 C 编写一个可以标记算术表达式的程序,但我在这里只提供了一个最小的、可重现的示例。
以下代码成功将-5.2foo拆分为-5.2和foo:
#include <stdio.h>
int main(void)
{
char str[] = "-5.2foo";
float f;
sscanf(str, "%f%s", &f, str);
printf("%f | %s\n", f, str);
return 0;
}
但是如果字符串只包含一个浮点数(例如-5.2),程序会打印-5.2 | -5.2,所以字符串似乎不是空的。有没有办法从 C 中的字符串中拆分浮点数,然后存储剩余的字符串?
【问题讨论】:
-
在使用任何结果变量之前,您需要检查
sscanf的返回值。在后一种情况下,您可能会发现它返回1,这意味着它只匹配浮点数。 -
即使是中等复杂的分词器也不会使用
sscanf。 DFA 更适合您。查找 flex 和 bison。 -
@JeffHolt 我已经研究过 flex/bison,我可能最终会使用它。