c ++ string.compare не принимает пробелы

0

Сначала я хочу извиниться за мой плохой титул. Теперь проблема. Я пытаюсь сравнить две строки в C++. Я попытался с string.compare и ==, никто из них не работал. Вот код

if(game_type == "AI vs AI"){
    std::cout<<"You choosed AI vs AI\n";
    aiVsAI(range);
}
else{
std::cerr <<"Error";
}

и с помощью string.compare

if(game_type.compare("AI vs AI") == 0){
    std::cout<<"You choosed AI vs AI\n";
    aiVsAI(range);
}
else{
    std::cerr <<"Error";
}

Если я дам AIvsAI для ввода, программа работает правильно, но если я вхожу в AI (пробел) vs (пробел) AI, программа печатает "Ошибка". Я пробовал использовать \x20 мгновенное пространство, но это тоже не сработало. Есть идеи, почему это происходит?

  • 0
    Распечатать строку. Могу поспорить, вы увидите AI .
  • 4
    Как вы получаете game_type ? Могу поспорить, что вы делаете std::cin >> game_type , который получает только первое слово.
Показать ещё 5 комментариев
Теги:
string
compare

1 ответ

2
Лучший ответ

Похоже, вы используете оператор, аналогичный

std::cin >> game_type;

для получения пользовательского ввода. Проблема заключается в том, что оператор >> извлекает только первое слово из строки, которую пользователь вводит, что заставляет game_type содержать только AI при game_type AI vs AI. (В качестве побочной заметки, если бы вы использовали std::cin >> blah на следующей строке, тогда blah будет содержать vs потому что этот введенный ввод еще не был использован.)

Чтобы исправить это, вы можете использовать std::getline:

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

Это получает все, что пользователь набирает на линии (вплоть до нажатия клавиши Enter) и помещает это в game_type. Это почти всегда правильный способ получить пользовательский ввод для интерактивной программы.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню