基于范围的 for 循环与普通 for 循环不同

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

所以我正在编写一个将单词转换为大写的程序,为此我检查了每个字符是否低于我向它们添加了 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 循环的内部实现是否有差异,或者它们在我的程序中是否有任何错误

c++ string for-loop lowercase
1个回答
0
投票

for 循环的内部实现是否有差异,或者它们在我的程序中是否有任何错误

在基于范围的 for 循环中,您正在处理

char
中每个
std::string
的副本。

for(char i:input)
    ^^^^^^
{
    // ...
}

要使实际大写,您需要通过引用传递。

for(char& i:input)
    ^^^^^^
{
    // ...
}
© www.soinside.com 2019 - 2024. All rights reserved.