如何使用此代码将cin转换为小写?

问题描述 投票:0回答:2

我正在制作文字游戏,希望我的选项具有通用的定义器。哪个有效。但是我希望std::cin >> choice;始终为小写字母,以便大写的拼写错误对玩家而言无关紧要。找不到任何答案。

cpp文件:

std::cout << std::endl << "Choise:";
std::cin >> choice;

if (dLookAround)
{
    std::cout << "ede" << std::endl; //just a test
}

头文件:

private:
std::string choice;

#define dLookAround \
    (choice == "Look around"\
    || choice == "What do i see?"\
    || choice == "What do i see"\
    || choice == "Explore"\
    || choice == "Scout")

在这种状态下,代码有效。但是我希望cin读小写字母,这样我就不必一直在#define中每个单词都使用大写和小写字母。

c++ string game-development
2个回答
1
投票

您可以简单地使用choice标头中的std::transform<algorithm>标头中的std::tolower<cctype>转换为小写;和。然后进行测试。

例如:

std::transform( choice.begin(), choice.end(), choice.begin(),
                []( auto c ){ return std::tolower( c ); } );

顺便说一句,您应该将choice传递给dLookAround,以使其在if语句中更具可读性,如下所示:

if ( dLookAround( choice ) ) { /* ... */ }

或具有更好的命名功能,例如isSelectedchoice

if ( isSelected( choice ) ) { /* ... */ }

1
投票

我只使用不区分大小写的比较,例如strcmpi()或等效值,而不转换输入,例如:

#define dLookAround ( \
    (strcmpi(choice.c_str(), "Look around") == 0) || \
    (strcmpi(choice.c_str(), "What do i see?") == 0) || \
    (strcmpi(choice.c_str(), "What do i see") == 0) || \
    (strcmpi(choice.c_str(), "Explore") == 0) || \
    (strcmpi(choice.c_str(), "Scout") == 0) \
    )
© www.soinside.com 2019 - 2024. All rights reserved.