如何遍历字符串中的单词? [英] How do I iterate over the words of a string?

查看:138
本文介绍了如何遍历字符串中的单词?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试遍历字符串中的单词。

I'm trying to iterate over the words of a string.

可以假定该字符串由空格分隔的单词组成。

The string can be assumed to be composed of words separated by whitespace.

请注意,我对C字符串函数或那种字符操作/访问不感兴趣。另外,请在回答中将优雅置于效率之上。

Note that I'm not interested in C string functions or that kind of character manipulation/access. Also, please give precedence to elegance over efficiency in your answer.

我目前拥有的最佳解决方案是:

The best solution I have right now is:

#include <iostream>
#include <sstream>
#include <string>

using namespace std;

int main()
{
    string s = "Somewhere down the road";
    istringstream iss(s);

    do
    {
        string subs;
        iss >> subs;
        cout << "Substring: " << subs << endl;
    } while (iss);
}

有没有更优雅的方法?

推荐答案

对于它的价值,这是另一种仅依靠标准库工具从输入字符串中提取令牌的方法。这是STL设计背后的力量和优雅的一个例子。

For what it's worth, here's another way to extract tokens from an input string, relying only on standard library facilities. It's an example of the power and elegance behind the design of the STL.

#include <iostream>
#include <string>
#include <sstream>
#include <algorithm>
#include <iterator>

int main() {
    using namespace std;
    string sentence = "And I feel fine...";
    istringstream iss(sentence);
    copy(istream_iterator<string>(iss),
         istream_iterator<string>(),
         ostream_iterator<string>(cout, "\n"));
}

可以将提取的令牌插入到输出流中,而不是将提取的令牌复制到输出流中一个容器,使用相同的通用 copy 算法。

Instead of copying the extracted tokens to an output stream, one could insert them into a container, using the same generic copy algorithm.

vector<string> tokens;
copy(istream_iterator<string>(iss),
     istream_iterator<string>(),
     back_inserter(tokens));

...或直接创建 vector

... or create the vector directly:

vector<string> tokens{istream_iterator<string>{iss},
                      istream_iterator<string>{}};

这篇关于如何遍历字符串中的单词?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆