如何从 C 中的字符串中解析标记?
如何从输入字符串中解析标记。 例如:
char *aString = "Hello world".
我希望输出为:
“你好”“世界”
How do i parse tokens from an input string.
For example:
char *aString = "Hello world".
I want the output to be:
"Hello" "world"
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
您将要使用
strtok
- 这里是一个很好的例子。You are going to want to use
strtok
- here is a good example.看一下 strtok,它是标准库的一部分。
Take a look at strtok, part of the standard library.
strtok
是一个简单的答案,但您真正需要的是一个能够正确执行此操作的词法分析器。 考虑以下问题:正如您所看到的,编写一个正确的词法分析器并不简单,而且
strtok
也不是一个正确的词法分析器。其他解决方案可能是一个单字符状态机,它可以精确地满足您的需要,或者是基于正则表达式的解决方案,使定位单词与间隙更加通用。 有很多方法。
当然,这一切都取决于你的实际需求是什么,我也不知道,所以从
strtok
开始。 但了解各种限制是有好处的。strtok
is the easy answer, but what you really need is a lexer that does it properly. Consider the following:As you can see, writing a proper lexer is not straightforward, and
strtok
is not a proper lexer.Other solutions could be a single character state machine that does precisely what you need, or regex-based solution that makes locating words versus gaps more generalized. There are many ways.
And of course, all of this depends on what your actual requirements are, and I don't know them, so start with
strtok
. But it's good to be aware of the various limitations.对于可重入版本,您可以使用
用于 Visual Studio 的 strtok_s 或 strtok_r for unix
For re-entrant versions you can either use
strtok_s for visual studio or strtok_r for unix
请记住,strtok非常很难得到正确的结果,因为:
您可以阅读有关此替代方案的信息。
Keep in mind that strtok is very hard to get it right, because:
You can read about this alternative.