如何从C中的字符串解析标记?

Pro*_*mer 4 c string tokenize

我如何从输入字符串解析标记.例如:

char *aString = "Hello world".
Run Code Online (Sandbox Code Playgroud)

我希望输出为:

"你好,世界"

And*_*are 7

你想要使用strtok- 这是一个很好的例子.


Tod*_*lin 6

看一下strtok,它是标准库的一部分.


Pau*_*ham 6

strtok这是一个简单的答案,但您真正需要的是一个能够正确执行此操作的词法分析器。考虑以下:

  • “hello”和“world”之间有一两个空格吗?
  • 实际上可以有任意数量的空白吗?
  • 可以包含垂直空白(\n、\f、\v)还是仅包含水平空白(\s、\t、\r)?
  • 可以包含任何 UNICODE 空白字符吗?
  • 如果单词之间有标点符号(“你好,世界”),该标点符号是一个单独的标记,是“你好”的一部分,还是被忽略?

正如您所看到的,编写一个正确的词法分析器并不简单,而且strtok也不是一个正确的词法分析器。

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

当然,这一切都取决于你的实际需求是什么,我也不知道,所以从strtok. 但了解各种限制是有好处的。