C++ 如何接受不区分大小写的输入?

C++ 如何接受不区分大小写的输入?,c++,C++,如何接受不区分大小写并允许在用户输入中嵌入空格?用户可以输入“香港”并与输入正确匹配。 我只有input[0]=toupper(input[0])仅当区分大小写位于单词开头时才接受 while(true){ cout << "Enter a city by name: "<< " "; std::getline (std::cin,input); if (input == "quit") { break; } input[0] = tou

如何接受不区分大小写并允许在用户输入中嵌入空格?用户可以输入“香港”并与输入正确匹配。 我只有
input[0]=toupper(input[0])
仅当区分大小写位于单词开头时才接受

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?    
}
while(true){

CUT

可以使用一个循环一次将整个字符串转换成大写一个字符,但是一个更好的解决方案是使用C++标准库的代码>转换< /代码>函数:

std::string hk = "hong konG";
std::transform(hk.begin(), hk.end(), hk.begin(), ::toupper);
这将对字符串中的所有字符应用
::toupper
,从而生成一个读取
“hongkong”
的字符串


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

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

另一个建议是使用
std::transform
也是一个非常好的解决方案。

当您想多次执行某项操作时(如字符串的每个字符都是大写)你写一个循环。所以写一个在每个字符上使用toupper的循环。如果你展示了更多的代码,我可能会告诉你具体的操作方法。只有一行代码不太好用。当你想写一个循环时,你会发现有一个更清晰的算法。这个算法是
std::transform
@chris我是个老古董,但我从来没有发现循环是不清晰的。@约翰,虽然算法有一个附加的名称,它应该通过阅读一个单词立即让你感觉到它在做什么,而且你不会重新发明已经制作和优化的东西。我承认,范围为,在它的简洁性中,也使它非常清晰,并且没有样板e> begin
end
调用以使用。什么是转换库?
#include
此代码可能会调用UB以进行任意用户输入,请看它是否工作,当我将上述代码添加到代码中时,它不是“cout”代码返回。可能你在某个地方犯了错误,如果没有看到你的代码就很难说。我不想把所有字符串都改成大写,我只是想确保如果有人输入“konG”,输出结果仍然是“konG”。我正在尝试将输入与我拥有的数组列表相匹配,如果有人输入“konG”在我的列表数组中,我有“kong”,输入仍然与列表中的匹配。列表中的所有字符串都是小写的吗?如果是,则将输入字符串转换为小写(使用tolower而不是toupper)。如果列表中有混合的大小写,则在比较之前将输入字符串和列表字符串转换为相同的大小写。我认为您已经获得了解决此问题的工具,您只需仔细考虑您正在执行的操作。此代码可能会为任意用户输入调用UB,请参阅
for (auto& c : str)
    c = std::toupper(c)