C++ :: Как передать строку, разбив по разделителям, в массив?

Как правильно поместить строку в массив, разбив предварительно по разделителям?..

Изначально массив строк объявлялся в исходниках:

const std::string STRING[] =
{
    "xxxxxxxxxxxxxxxxxx",
    "yyyyyyyyyyyyyyyyyy",
    "zzzzzzzzzzzzzzzzzz",
};


.
.
.
DWORD written = 0;
for (auto note : STRING)
{
    WriteFile(file, note.c_str(), note.size(), &written, 0);
}
.
.
.

Но сейчас я получаю строку с хоста такого вида:

"xxxxxxxxxxxxxxxxxx|yyyyyyyyyyyyyyyyyy|zzzzzzzzzzzzzzzzzz"

сам затрудняюсь правильно разбить её и поместить в массив STRING[ ], подскажите пожалуйста как сделать это правильно.

================

Повторюсь.
К примеру имеем две переменные:

std::string VERS_ONE = StringGetHost;  // получаем строку с хоста вида "xxxxxxxxxxxx|yyyyyyyyyyyy|zzzzzzzzzzzzz"
std::string VERS_TWO[ ] = {
    "xxxxxxxxxxxx",
    "yyyyyyyyyyyy",
    "zzzzzzzzzzzzz",
};

Так вот, необходимо привести переменную VERS_ONE к полному аналогу VERS_TWO, чтобы содержала массив строк (не более 40 строк и не более 100 символов в строке (Unix или Windows)).
Итого что то такое:

std::string VERS_ONE(const std::string&& StringGetHost) {
 .
 // Тут обработка
 .
 return vers_one  // полный аналог VERS_TWO
}

Поэтому конечно ваши конструкции работают, но они не дают ответа на мой вопрос.


Ответы (1 шт):

Автор решения: Harry

Ну, можно использовать strtok из C

vector<string> v;
string s = "xxxxxxxxxxxxxxxxxx|yyyyyyyyyyyyyyyyyy|zzzzzzzzzzzzzzzzzz";
for(char * c = strtok(s.data(),"|"); c; c = strtok(nullptr,"|"))
    v.push_back(c);

for(auto t: v) cout << t << endl;

можно и руками примерно так:

vector<string> v;
string s = "xxxxxxxxxxxxxxxxxx|yyyyyyyyyyyyyyyyyy|zzzzzzzzzzzzzzzzzz";

size_t b = 0; // Очередная подстрока
for(size_t e = s.find('|',b); e != s.npos; e = s.find('|',++b))
{
    v.push_back(s.substr(b,e-b));
    b = e;
}
v.push_back(s.substr(b));

for(auto t: v) cout << t << endl;
→ Ссылка