Допустим пользователь в консоле введёт /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, между которыми пробелы, как я показал на примере, в первом предложении?
Функция substr возвращает кусок строки нужной длины от указанной позиции.
А для того, чтобы узнать позиции и длины, используй функции find (чтобы найти очередной пробел), find_first_not_of (чтобы найти после него первый НЕпробел) или проверяй символы в цикле (это может оказаться проще).
окей, гугл: c++ split string by spaces 100 раз обсуждалось. И через Boost решается, и циклом с istringstream. Если надо, то можно среди решений выбрать и надежное к избытку пробелов.
если это ввод пользователя то проще всего всё скинуть на cin (если это возможно) н-р: //ввод и выход по /exit vector< string > v; for(string s;cin>>s && s!="/exit";v.emplace_back(s));
И эти 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, между которыми пробелы, как я показал на примере, в первом предложении?