Разделение строки с помощью C ++ 11

Каким будет самый простой способ разбить строку с помощью C ++ 11?

Я видел метод, использованный в этом сообщении , но я чувствую, что он должен чтобы быть менее подробным способом сделать это с использованием нового стандарта.

Редактировать: я хотел бы получить вектор в результате и иметь возможность разграничивать один символ.

49
задан Community 23 May 2017 в 02:26
поделиться

1 ответ

Один возможный способ сделать это находит все случаи строки разделения и хранит местоположения к списку. Тогда считайте символы входной строки и когда Вы добираетесь до положения, где существует 'поисковый хит', в списке положения тогда Вы переходите вперед на 'длину строки разделения'. Этот подход берет строку разделения любой длины. Вот мое протестированное и рабочее решение.

#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;
}
0
ответ дан 7 November 2019 в 11:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: