如何在 C++ 中将空格分隔的字符串拆分为多个字符串?
我的代码有点像下面这样:
static int myfunc(const string& stringInput)
{
string word;
stringstream ss;
ss << stringInput;
while(ss >> word)
{
++counters[word];
}
...
}
这里的目的是获取一个输入字符串(用空格''分隔)到字符串变量word
中,但是这里的代码似乎有很多开销——将输入字符串转换为字符串流,并从字符串流中读取到目标字符串。
有没有更优雅的方法来实现相同的目的?
Somewhat my code looks like below:
static int myfunc(const string& stringInput)
{
string word;
stringstream ss;
ss << stringInput;
while(ss >> word)
{
++counters[word];
}
...
}
The purpose here is to get an input string (separated by white space ' ') into the string variable word
, but the code here seems to have a lot of overhead -- convert the input string to a string stream and read from the string stream into the target string.
Is there a more elegant way to accomplish the same purpose?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
您问的是如何拆分字符串。 Boost 有一个有用的实用程序 boost::split()
http://www.boost.org/doc/libs/1_48_0/doc/html/string_algo/usage.html#id3115768
下面是将生成的单词放入向量中的示例:
You are asking how to split a string. Boost has a helpful utility boost::split()
http://www.boost.org/doc/libs/1_48_0/doc/html/string_algo/usage.html#id3115768
Here's an example that puts the resulting words into a vector:
使用流迭代器和标准函数:
如果你没有 lambda 那么:
Use stream iterators and a standard function:
If you don't have lambda then:
也许使用 ostringstream
Use ostringstream, maybe
在 Visual C++ 11 中,您可以使用 TR1 中的 regex_token_iterator。
如果您担心性能(以及字符串复制等开销),您可以编写自己的例程:
In Visual C++ 11 you can use regex_token_iterator from TR1.
If you concerned about performance (and overheads like string copying), you can write your own routine: