【发布时间】:2023-01-26 21:01:25
【问题描述】:
我想制作一个程序,使句子中单词的每个首字母大写(没有 toupper)。
但出于某种原因,for 循环没有按照我的意愿执行。该程序只是跳过for 循环。
我从不在其他任何地方使用i。只针对循环和我在循环中写的东西。
顺便说一句,这是程序作为一个整体应该做的事情。
-
初始化
i和Sentence(当然是两种不同的数据类型) -
让用户输入选择的小写句子(包括空格)
-
检查首字母是否为小写(ASCII 码从 97 到 122)
-
首字母大写,因为第一个单词前没有空格(将在下一步中解释)
-
在
for循环中,检查后面的字母是否为空格(ASCII 码 32) -
然后,检查下一个字母
i++是否为小写字母(ASCII 码从 97 到 122) -
如果所有这些都是正确的,程序会从该字母中减去 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循环。我该怎么办?
【问题讨论】:
-
每个
i++都会递增i。您不希望i增加 4 倍,是吗? -
i++修改i- 因为您在循环中最多调用 4 次,所以它访问的方式超出了您想要的下一个字符 -
第二次查看时,检查将在
Sentence[i++] >= 97处失败,因为您再次检查相同的字符(您已经确定为32,因此小于97),因为i++返回了 @987654343 的先前值@ -
为什么不对照 Sentence.size() 检查 i++?而不是 97 使用 'a'
标签: c++ loops for-loop uppercase