**已关闭。**此问题为not reproducible or was caused by typos。当前不接受答案。
这个问题是由打字错误或无法再重现的问题引起的。虽然类似的问题在这里可能是on-topic,但这个问题的解决方式不太可能帮助未来的读者。
昨天关门了。
Improve this question
我想编写一个程序,使句子中每个单词的第一个字母都大写(不使用toupper),但由于某种原因,for
循环没有完成我想要它完成的任务,程序只是跳过了for
循环,我在其他地方从来没有使用过i
,只在循环和我在循环中编写的内容中使用。
顺便说一下,这是程序作为一个整体应该做的事情。
1.初始化i
和Sentence
(当然是两种不同的数据类型)
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.
我该怎么办?
1条答案
按热度按时间ovfsdjhp1#
在循环中循环时,您将使用递增运算符直接修改
i
:++
。您正在执行循环(它递增i
本身),并且在检查Sentence[i++]
时,递增i
(i += 1
,然后访问位于i
索引处的Sentence。要解决此问题,请删除递增运算符:但是这样代码就变得多余了,因为我们要检查if
sentence[i] == 32
,在if子句中:if sentence[i] >= 97
,我们知道它永远不会运行。我假设当您使用:i++
,您要访问下一个字符。用途:i + 1
来实现这一点。