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

时间:2009-02-17 19:26:01

标签: c string tokenize

如何从输入字符串中解析标记。 例如:

char *aString = "Hello world".

我希望输出为:

  

“你好”“世界”

5 个答案:

答案 0 :(得分:7)

您将要使用strtok - here is a good example.

答案 1 :(得分:6)

查看strtok,标准库的一部分。

答案 2 :(得分:4)

strtok是一个简单的答案,但你真正需要的是一个能够正确完成它的词法分析器。请考虑以下事项:

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

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

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

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

答案 3 :(得分:3)

对于可重入版本,您可以使用 strtok_s for visual studiostrtok_r for unix

答案 4 :(得分:2)

请记住,strtok 非常很难做到正确,因为:

  • 修改输入
  • 分隔符由空终止符
  • 替换
  • 合并相邻的分隔符,当然还有
  • 不是线程安全的。

您可以阅读此alternative