如何将std::cin读取内容转为小写?C++文本游戏开发需求
解决文本游戏输入大小写统一判定的问题
嘿,这个问题很好解决!我们只需要把玩家输入的字符串统一转成小写,这样判定的时候就不用管大小写差异了,也不用费劲枚举所有大小写变体。下面是具体的修改步骤和代码:
1. 添加必要的头文件
首先,在你的.cpp文件顶部添加<algorithm>头文件,因为我们要用到std::transform函数来转换字符串:
#include <algorithm>
2. 转换输入为小写
在读取玩家输入的choice之后,立即将整个字符串转换为小写。修改.cpp文件中的输入处理部分:
std::cout << std::endl << "Choice: "; std::cin >> choice; // 将输入字符串统一转为小写,避免大小写判定问题 std::transform(choice.begin(), choice.end(), choice.begin(), [](unsigned char c) { return std::tolower(c); }); if (dLookAround) { std::cout << "ede" << std::endl; // Just a test }
这里用lambda表达式遍历字符串的每个字符,调用std::tolower转换为小写。用unsigned char是为了避免char为有符号类型时,某些特殊字符值导致的未定义行为。
3. 更新判定宏为小写形式
因为现在输入已经被统一转为小写,所以需要把头文件中的dLookAround宏里的所有选项改成小写:
private: std::string choice; #define dLookAround \ (choice == "look around"\ || choice == "what do i see?"\ || choice == "what do i see"\ || choice == "explore"\ || choice == "scout")
这样修改之后,不管玩家输入Look Around、LOOK AROUND还是look around,都会被转换为小写的look around,完美匹配宏里的判定条件,彻底解决大小写输入错误影响判定的问题!
内容的提问来源于stack exchange,提问作者Wilicious
相关产品推荐
相关产品推荐

