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;