Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

c++ Как сделать правильный str.substr, чтобы он чекал 2 пробела, в которых потом будет какой-то текст...

Alex Alex Мастер (1259), закрыт 4 года назад
Допустим пользователь в консоле введёт /giverank anton admin
И эти anton, admin должны записаться в 2 переменные. Но у меня не получается, вот как я думал сделать:
if (str.substr(0, 12) == "/giverank ") { <-- 3 пробела

string playerName = str.substr(10, cch.length() - 10 - 1);
string rankName = str.substr(12, cch.length() - 12 - 1);
}
Это сработает, если будут 3 пробела или 2 пробела и 3 любой текст, написанный в консоле.
Я могу сделать, чтобы он проверял на 1 пробел, но он только имя возьмет:
if (str.substr(0, 10) == "/giverank ") {
string playerName = str.substr(10, cch.length() - 10 - 1);
}

Как мне сделать, чтобы он брал два string, между которыми пробелы, как я показал на примере, в первом предложении?
Лучший ответ
a a Гуру (2757) 4 года назад
Функция substr возвращает кусок строки нужной длины от указанной позиции.

А для того, чтобы узнать позиции и длины, используй функции find (чтобы найти очередной пробел), find_first_not_of (чтобы найти после него первый НЕпробел) или проверяй символы в цикле (это может оказаться проще).
Остальные ответы
H-p A Просветленный (46828) 4 года назад
окей, гугл: c++ split string by spaces
100 раз обсуждалось.
И через Boost решается, и циклом с istringstream. Если надо, то можно среди решений выбрать и надежное к избытку пробелов.
... Гений (84839) 4 года назад
если это ввод пользователя то проще всего всё скинуть на cin (если это возможно)
н-р:
//ввод и выход по /exit
vector< string > v;
for(string s;cin>>s && s!="/exit";v.emplace_back(s));

https://www.ideone.com/vdM51h
Похожие вопросы