4

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

char *aString = "Hello world".

我希望输出为:

“你好世界”

4

5 回答 5

7

您将要使用strtok-这是一个很好的例子。

于 2009-02-17T19:27:27.123 回答
6

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

于 2009-02-17T19:26:51.383 回答
6

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

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

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

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

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

于 2009-02-17T22:09:54.250 回答
3

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

于 2009-02-17T19:39:53.363 回答
2

请记住,strtok很难正确处理,因为:

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

您可以阅读有关此替代方案的信息。

于 2009-02-17T20:22:01.560 回答