c++ 为什么for循环不执行我在程序中编写的内容?[closed]

9q78igpj  于 2023-01-28  发布在  其他
关注(0)|答案(1)|浏览(146)

**已关闭。**此问题为not reproducible or was caused by typos。当前不接受答案。

这个问题是由打字错误或无法再重现的问题引起的。虽然类似的问题在这里可能是on-topic,但这个问题的解决方式不太可能帮助未来的读者。
昨天关门了。
Improve this question
我想编写一个程序,使句子中每个单词的第一个字母都大写(不使用toupper),但由于某种原因,for循环没有完成我想要它完成的任务,程序只是跳过了for循环,我在其他地方从来没有使用过i,只在循环和我在循环中编写的内容中使用。
顺便说一下,这是程序作为一个整体应该做的事情。
1.初始化iSentence(当然是两种不同的数据类型)
1.使用户输入所选的小写句子(包括空格)
1.检查第一个字母是否为小写(ASCII代码从97到122)
1.首字母大写,因为第一个单词前没有空格(将在下一步中解释)
1.在for循环中,检查后面的字母是否为空格(ASCII代码32)
1.然后,检查下一个字母i++是否为小写字母(ASCII代码从97到122)
1.如果所有这些都是正确的,则程序从该字母中减去32(32是每个小写字母和大写字母的ASCII代码之间的差,例如:a(ASCII码97)- 32 = A(ASCII码65))

#include <iostream>
#include <string>
using namespace std;

int main(){
    int i;
    string Sentence;
    getline(cin, Sentence);
        if(Sentence[0] >= 97 && Sentence[0] <= 122)
            Sentence[0] = Sentence[0] - 32;
    for(i = 0; i <= Sentence.length() - 1; i++) // I'm talking about this loop
        if(Sentence[i] == 32)
            if(Sentence[i++] >= 97 && Sentence[i++] <= 122)
                Sentence[i++] = Sentence[i++] - 32;


    cout << Sentence;

    return 0;
}

我尝试了固定的数字,它的工作。我没有使用任何循环,我只是重复它手动我上传了两张图片,有和没有for循环。
Here it is without the loop.
Here it is with the loop.
我该怎么办?

ovfsdjhp

ovfsdjhp1#

在循环中循环时,您将使用递增运算符直接修改i++。您正在执行循环(它递增i本身),并且在检查Sentence[i++]时,递增ii += 1,然后访问位于i索引处的Sentence。要解决此问题,请删除递增运算符:

for(i = 0; i <= Sentence.length() - 1; i++)
        if(Sentence[i] == 32)
            if(Sentence[i] >= 97 && Sentence[i] <= 122)
                Sentence[i] = Sentence[i] - 32;

但是这样代码就变得多余了,因为我们要检查if sentence[i] == 32,在if子句中:if sentence[i] >= 97,我们知道它永远不会运行。我假设当您使用:i++,您要访问下一个字符。用途:i + 1来实现这一点。

相关问题