所以我正在编写一个将单词转换为大写的程序,为此我检查了每个字符是否低于我向它们添加了 32 (利用 ascii 表),但是当我使用基于范围的 for 循环来执行此操作时。
string input;
cin >> input;
for(char i:input)
{
if(islower(i))i -= 32;
}
cout << input;
切换到正常的 for 循环后什么也没有发生,单词按预期更改了
string input;
cin >> input;
for(int i{0};i < input.size();i++)
{
if(islower(input[i]))input[i] -= 32;
}
cout << input;
for 循环的内部实现是否有差异,或者它们在我的程序中是否有任何错误
for 循环的内部实现是否有差异,或者它们在我的程序中是否有任何错误
在基于范围的 for 循环中,您正在处理
char
中每个 std::string
的副本。
for(char i:input)
^^^^^^
{
// ...
}
要使实际大写,您需要通过引用传递。
for(char& i:input)
^^^^^^
{
// ...
}