如何在C语言中从字符串中解析出一个标记?

4

如何从输入字符串中解析令牌。

例如:

char *aString = "Hello world".

我希望输出结果为:

"Hello" "world"

5个回答

7

你需要使用 strtok - 这里有一个很好的例子:链接


你可以使用strtok_r(),它是线程安全的。你可以在同一个manpage中看到它们两个。 - Nathan Fellman

6
请看标准库中的 strtok

6

strtok是一个简单的答案,但你真正需要的是一个可以正确处理的词法分析器。请考虑以下内容:

  • "hello"和"world"之间是否有一个或两个空格?
  • 实际上可能包含任意数量的空白字符吗?
  • 可能包括垂直空格(\n、\f、\v)还是只包括水平空格(\s、\t、\r)?
  • 可能包括任何UNICODE空白字符吗?
  • 如果单词之间有标点符号("hello, world"),标点符号是独立的令牌,还是属于"hello,",或者被忽略?

如你所见,编写一个正确的词法分析器并不容易,strtok也不是一个正确的词法分析器。

其他解决方案可能是一个单字符状态机,可以精确地做到你需要的功能,或者基于正则表达式的解决方案,使定位单词与间隙更加通用化。有很多方法。

当然,所有这些都取决于你的实际要求,而我不知道它们是什么,所以从strtok开始。但了解各种限制是好的。


3

2
请记住,strtok很难正确使用,因为:
  • 它会修改输入
  • 分隔符会被替换为空终止符
  • 合并相邻的分隔符
  • 不是线程安全的。
你可以阅读这个替代方案

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接