Вектор содержит только один элемент

Я делаю текстовое приключение на С++ как попытку выучить язык. Игрок взаимодействует с помощью таких команд, как Смотреть или путешествовать на север. Пока у меня есть код, который преобразует текст в нижний регистр, а затем разбивает его на вектор. Это отлично работает для команд из одного слова, но когда я перехожу к реализации более длинных команд, я обнаруживаю, что длина всегда = 1, и доступ к этому возвращается с ошибкой. Вот мой код:

//Input function.
void Input() {
    const char delim = ' ';

    //Processing
    std::cin >> input;
    std::transform(input.begin(), input.end(), input.begin(),
        [](unsigned char c) { return std::tolower(c); });
    std::vector<std::string> out;
    split(input, ' ', out);

    //Commands
    if (out[0] == "exit")
        exit(0);
    else if (out[0] == "help")
        Help();
    else if (out[0] == "look")
        Look();
    else if (out[0] == "travel" || out[0] == "go") {
        //This code will never run.
        if (int(out.size()) == 2) {
            Travel(out[1]);
        }
    }
}

//Split function
void split(std::string const& str, const char delim, std::vector<std::string>& out)
{
    std::stringstream ss(str);
    std::string s;

    while (std::getline(ss, s, delim)) {
        out.push_back(s);
    }
}

Любая помощь будет принята с благодарностью! Спасибо, Логан.

Кстати говоря, можно передать std::tolower напрямую в std::transform, лямбда не нужна.

Some programmer dude 23.04.2022 07:03
3 метода стилизации элементов HTML
3 метода стилизации элементов HTML
Когда дело доходит до применения какого-либо стиля к нашему HTML, существует три подхода: встроенный, внутренний и внешний. Предпочтительным обычно...
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
1
1
45
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Забавный факт, когда вы делаете это:

std::cin >> input;

Он считывает символы до следующего символа пробела и помещает их в строку. Это означает, что input будет содержать только первое введенное вами слово.

Хотите получить всю линейку? Ну понятно, как это сделать вы уже знаете, просто звоните std::getline:

std::getline(std::cin, input);

Другие вопросы по теме