問題

我正在嘗試迭代字串的單詞.

這個字串可以假設是由用空格分隔的單片語成的。

請注意,我對C字串函式或那種字元操作/訪問沒有興趣.另外,請在答案中優先考慮優雅優於效率.

我現在擁有的最好的解決方案是:

 #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設計背後的力量和優雅的例子。

 #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, "
"));
}
 

不要將提取的令牌複製到輸出流中,而是可以使用相同的通用 copy 演算法將它們插入容器中。

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

...或直接建立vector:

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

  相同標籤的其他問題

c++stringsplit