как разделить строку, встроенную в разделитель в C ++? - PullRequest
0 голосов
/ 27 мая 2020

Я понимаю, как разбить строку на строку с помощью разделителя в C ++, но как разбить строку встроенный в разделитель, например, попробуйте разделить ”~!hello~! random junk... ~!world~!” строкой ”~!” в массив [“hello”, “ random junk...”, “world”]? существуют ли для этого какие-либо стандартные библиотечные функции C ++ или, если нет, какой-либо алгоритм, который мог бы этого достичь?

1 Ответ

2 голосов
/ 27 мая 2020
#include <iostream>
#include <vector>
using namespace std;

vector<string> split(string s,string delimiter){
    vector<string> res;
    s+=delimiter;       //adding delimiter at end of string
    string word;
    int pos = s.find(delimiter);
    while (pos != string::npos) {
        word = s.substr(0, pos);                // The Word that comes before the delimiter
        res.push_back(word);                    // Push the Word to our Final vector
        s.erase(0, pos + delimiter.length());   // Delete the Delimiter and repeat till end of String to find all words
        pos = s.find(delimiter);                // Update pos to hold position of next Delimiter in our String 
    }   
    res.push_back(s);                          //push the last word that comes after the delimiter
    return res;
}

int main() {
        string s="~!hello~!random junk... ~!world~!";
        vector<string>words = split(s,"~!");
        int n=words.size();
        for(int i=0;i<n;i++)
            std::cout<<words[i]<<std::endl;
        return 0;
 }

Вышеупомянутая программа найдет все слова, которые встречаются до, между и после указанного вами разделителя . Внеся незначительные изменения в функцию, вы можете настроить ее в соответствии с вашими потребностями (например, если вам не нужно искать слово, которое встречается перед первым или последним разделителем).

Но для ваших нужд данная функция выполняет правильное разбиение слов в соответствии с указанным вами разделителем.

Надеюсь, это решит ваш вопрос!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...