关于c ++:如何接受不区分大小写的输入?


How to accept case-insensitive inputs?

本问题已经有最佳答案,请猛点这里访问。

如何接受不区分大小写并允许在用户输入中嵌入空格?因此用户可以进入"香港",并与输入进行正确匹配。

我只有input[0] = toupper(input[0]);,它只接受区分大小写在单词开头的情况。

1
2
3
4
5
6
7
8
9
10
11
while(true){
cout <<"Enter a city by name:"<<"";
std::getline (std::cin,input);
if (input =="quit")
    {
        break;
    }
input[0] = toupper (input[0]);

    //....how do I loop to find all letter's in the input string variable?    
}


可以使用一次循环将整个字符串转换为大写一个字符,但更好的解决方案是使用C++标准库的EDCOX1×0函数来实现:

1
2
std::string hk ="hong konG";
std::transform(hk.begin(), hk.end(), hk.begin(), ::toupper);

这会将::toupper应用于字符串的所有字符,从而产生一个读取"HONG KONG"的字符串。

IDENO演示。


1
2
for (auto& c : str)
    c = std::toupper(c)


您可以像这样将整个字符串转换为大写

1
2
for (size_t i = 0; i < input.size(); ++i)
    input[i] = toupper (input[i]);

使用std::transform的另一个建议也是一个完美的解决方案。