Каким будет самый простой способ разбить строку с помощью C ++ 11?
Я видел метод, использованный в этом сообщении , но я чувствую, что он должен чтобы быть менее подробным способом сделать это с использованием нового стандарта.
Редактировать: я хотел бы получить вектор
в результате и иметь возможность разграничивать один символ.
Один возможный способ сделать это находит все случаи строки разделения и хранит местоположения к списку. Тогда считайте символы входной строки и когда Вы добираетесь до положения, где существует 'поисковый хит', в списке положения тогда Вы переходите вперед на 'длину строки разделения'. Этот подход берет строку разделения любой длины. Вот мое протестированное и рабочее решение.
#include <iostream>
#include <string>
#include <list>
#include <vector>
using namespace std;
vector<string> Split(string input_string, string search_string)
{
list<int> search_hit_list;
vector<string> word_list;
size_t search_position, search_start = 0;
// Find start positions of every substring occurence and store positions to a hit list.
while ( (search_position = input_string.find(search_string, search_start) ) != string::npos) {
search_hit_list.push_back(search_position);
search_start = search_position + 1;
}
// Iterate through hit list and reconstruct substring start and length positions
int character_counter = 0;
int start, length;
for (auto hit_position : search_hit_list) {
// Skip over substrings we are splitting with. This also skips over repeating substrings.
if (character_counter == hit_position) {
character_counter = character_counter + search_string.size();
continue;
}
start = character_counter;
character_counter = hit_position;
length = character_counter - start;
word_list.push_back(input_string.substr(start, length));
character_counter = character_counter + search_string.size();
}
// The last substring might be still be unprocessed, get it.
if (character_counter < input_string.size()) {
word_list.push_back(input_string.substr(character_counter, input_string.size() - character_counter));
}
return word_list;
}
int main() {
vector<string> word_list;
string search_string = " ";
// search_string = "the";
string text = "thetheThis is some text to test with the split-thethe function.";
word_list = Split(text, search_string);
for (auto item : word_list) {
cout << "'" << item << "'" << endl;
}
cout << endl;
}