相关疑难解决方法(0)

如何迭代字符串的单词?

我正在尝试迭代字符串的单词.

可以假设该字符串由用空格分隔的单词组成.

请注意,我对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);
}
Run Code Online (Sandbox Code Playgroud)

有没有更优雅的方式来做到这一点?

c++ string split

2895
推荐指数
43
解决办法
214万
查看次数

通过多个分隔符将字符串拆分为单词

我有一些文字(有意义的文字或算术表达),我想把它分成文字.
如果我有一个分隔符,我会使用:

std::stringstream stringStream(inputString);
std::string word;
while(std::getline(stringStream, word, delimiter)) 
{
    wordVector.push_back(word);
}
Run Code Online (Sandbox Code Playgroud)

如何将字符串分成具有多个分隔符的标记?

c++ string token delimiter

31
推荐指数
4
解决办法
5万
查看次数

使用多个分隔符进行快速字符串拆分

我在StackOverflow上调查了一段时间,找到了很好的算法来将带有多个分隔符的字符串拆分成一个vector< string >.我还发现了一些方法:

推动方式:

boost::split(vector, string, boost::is_any_of(" \t"));
Run Code Online (Sandbox Code Playgroud)

getline方法:

std::stringstream ss(string);
std::string item;
while(std::getline(ss, item, ' ')) {
    vector.push_back(item);
}
Run Code Online (Sandbox Code Playgroud)

Boost的标记化方式:

char_separator<char> sep(" \t");
tokenizer<char_separator<char>> tokens(string, sep);
BOOST_FOREACH(string t, tokens)
{
   vector.push_back(t);
}
Run Code Online (Sandbox Code Playgroud)

和酷STL方式:

     istringstream iss(string);
     copy(istream_iterator<string>(iss),
     istream_iterator<string>(),
     back_inserter<vector<string> >(vector));
Run Code Online (Sandbox Code Playgroud)

和Shadow2531的方法(参见链接主题).

他们中的大多数来自这个主题.但不幸的是他们没有解决我的问题:

  • Boost的分裂很容易使用,但是大数据(在最好的情况下大约1.5*10 ^ 6单个元素)和大约10个分隔符我使用它的可怕的慢.

  • getline,STL和Shadow2531的方法有,我只能用一个单个字符作为分隔符的问题.我需要更多.

  • 在速度方面,Boost的标记化更加可怕.用10个分隔符花了11秒钟将一个字符串分成1.5*10 ^ 6个元素.

所以我不知道该怎么做:我希望有一个非常快速的字符串拆分算法和多个分隔符.

Boost的分裂最大还是有办法更快地完成它?

c++ string performance boost split

27
推荐指数
1
解决办法
2万
查看次数

标签 统计

c++ ×3

string ×3

split ×2

boost ×1

delimiter ×1

performance ×1

token ×1