vector<string> split_string(string input_string) {
string::iterator new_end = unique(input_string.begin(), input_string.end(), [] (const char &x, const char &y) {
return x == y and x == ' ';
});
input_string.erase(new_end, input_string.end());
while (input_string[input_string.length() - 1] == ' ') {
input_string.pop_back();
}
vector<string> splits;
char delimiter = ' ';
size_t i = 0;
size_t pos = input_string.find(delimiter);
while (pos != string::npos) {
splits.push_back(input_string.substr(i, pos - i));
i = pos + 1;
pos = input_string.find(delimiter, i);
}
splits.push_back(input_string.substr(i, min(pos, input_string.length()) - i + 1));
return splits;
}
答案 0 :(得分:0)
哇。如此简单的任务需要很多行代码。
该函数应将字符串拆分为子字符串。脱脂剂是一个空间。
前两个或更多空格应消除。使用std::unique
。然后尾随空格将被循环删除。我看不到前导空格会被消除。
之后,用std::find
搜索定界符(空格)。然后将子字符串a复制到向量中。
请注意,所有这些操作都可以使用单线完成。甚至不需要任何子功能。解决方案是使用“ std :: regex”定义要查找的内容。然后在向量的范围构造函数中使用sregex_token_iterator
:
请参阅:
#include <iostream>
#include <string>
#include <regex>
#include <vector>
// Define, what we want to find. In this case: Characters, Digits and _. Or, whatever you want to have
const std::regex regexForWord("([\\w\\d_]+)");
int main()
{
std::string test(" Hello,,,World.: Hello ... World1 ");
// Define variable vector and fill it
std::vector<std::string> words{ std::sregex_token_iterator(test.begin(), test.end(), regexForWord, 1), std::sregex_token_iterator() };
// Display output
std::copy(words.begin(), words.end(), std::ostream_iterator<std::string>(std::cout, "\n"));
return 0;
}