相关疑难解决方法(0)

用字符拆分字符串

我知道这是一个非常容易的问题,但我只想一劳永逸地解决这个问题

我只想使用字符作为拆分分隔符将字符串拆分为数组.(很像C#着名的.Split()函数.我当然可以应用蛮力方法,但我想知道是否还有更好的方法.

到目前为止,我已经搜索过,可能最接近的解决方案方法是使用strtok(),但由于它的不便(将字符串转换为字符数组等),我不喜欢使用它.有没有更简单的方法来实现这个?

注意:我想强调这一点,因为人们可能会问"蛮力怎么行不通".我的强力解决方案是创建一个循环,并使用里面的substr()函数.但是,由于它需要起点和长度,因此当我想分割日期时它会失败.因为用户可能会在7/12/2012或07/3/2011输入它,在计算"/"分隔符的下一个位置之前,我可以真正地告诉它长度.

c++ string algorithm

39
推荐指数
5
解决办法
8万
查看次数

用单个空格拆分字符串

可能重复:
如何在C++中拆分字符串?

我需要用单个空格分割一个字符串并将其存储到一个字符串数组中.我可以使用istringstream实现这一点,但我无法实现的是:

我希望每个空格都能终止当前的单词.因此,如果连续有两个空格,则我的数组中的一个元素应为空白.

例如:

(下划线表示空格)

This_is_a_string.
gets split into:
A[0] = This
A[1] = is
A[2] = a
A[3] = string.

This__is_a_string.
gets split into:
A[0] = This
A[1] = ""
A[2] = is
A[3] = a
A[4] = string.
Run Code Online (Sandbox Code Playgroud)

我该如何实现呢?

c++ string

34
推荐指数
3
解决办法
17万
查看次数

如何使用istringstream与其他分隔符分割字符串而不是空白?

以下技巧istringstream用于分割带有空格的字符串.

int main() {
    string sentence("Cpp is fun");
    istringstream in(sentence);
    vector<string> vec = vector<string>(istream_iterator<string>(in), istream_iterator<string>());
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

是否有类似的技巧来分割带any分隔符的字符串?例如,|在"Cpp | is | fun"中.

c++

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

将包含多个数字的String转换为整数

我意识到这个问题可能在过去曾多次被问过,但我会继续不管.

我有一个程序,它将从键盘输入中获取一串数字.数字将始终采用"66 33 9"的形式.基本上,每个数字都用空格分隔,用户输入将始终包含不同数量的数字.

我知道如果每个用户输入的字符串中的数字量不变,使用'sscanf'会有效,但对我来说情况并非如此.另外,因为我是C++的新手,所以我更喜欢处理'字符串'变量而不是字符数组.

c++ string integer

31
推荐指数
3
解决办法
7万
查看次数

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

我在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万
查看次数

19
推荐指数
5
解决办法
3万
查看次数

在C++中拆分一系列空分隔字符串的简单方法

我有一系列字符串存储在一个数组中,由空格分隔(例如['f','o','o','\ 0','b','a','r','\ 0'...]),我需要把它分成一个std::vector<std::string>或类似的.

我可以写一个10行循环来使用std::findstrlen(事实上​​我刚才这样做),但我想知道是否有更简单/更优雅的方法来做,例如我忽略的一些STL算法,可以哄骗这样做.

这是一个相当简单的任务,如果有一些聪明的STL技巧可以应用于使其更简单,我也不会感到惊讶.

任何接受者?

c++ stl std

19
推荐指数
3
解决办法
5850
查看次数

使用C++ ifstream从文本文件中读取整数

我想从文本文件中读取图形邻接信息并将其存储到矢量中.

  • 该文件具有任意行数

  • 每一行都有以'\n'结尾的任意整数数

例如,

First line:
0 1 4
Second line:
1 0 4 3 2
Thrid line:
2 1 3
Fourth line:
3 1 2 4
Fifth line:
4 0 1 3
Run Code Online (Sandbox Code Playgroud)

如果我一次使用getline()读取一行,我该如何解析该行(因为每行有可变数量的整数)?

有什么建议?

c++

19
推荐指数
2
解决办法
5万
查看次数

PHP的explode()函数是否有C++的等价物?

可能重复:
在C++中拆分字符串

在PHP中,该explode()函数将获取一个字符串并将其切割成一个数组,用指定的分隔符分隔每个元素.

C++中是否有等效的功能?

php c++ arrays explode equivalent

19
推荐指数
2
解决办法
3万
查看次数

C++:将字符串拆分为数组

我试图插入一个由空格分隔的字符串到一个字符串数组,而不使用C++中的vector.例如:

using namespace std;
int main() {
    string line = "test one two three.";
    string arr[4];

    //codes here to put each word in string line into string array arr
    for(int i = 0; i < 4; i++) {
        cout << arr[i] << endl;
    }
}
Run Code Online (Sandbox Code Playgroud)

我希望输出为:

test
one
two
three.
Run Code Online (Sandbox Code Playgroud)

我知道在C++中已经有很多问题要求字符串>数组.我意识到这可能是一个重复的问题,但我找不到任何满足我条件的答案(将字符串拆分为数组而不使用向量).如果这是一个重复的问题,我会提前道歉.

c++ arrays string vector

19
推荐指数
2
解决办法
13万
查看次数

标签 统计

c++ ×10

string ×6

arrays ×2

split ×2

algorithm ×1

boost ×1

equivalent ×1

explode ×1

integer ×1

performance ×1

php ×1

std ×1

stl ×1

vector ×1