问题描述
我这里有两个代码是相同的,唯一的区别是我在第一个代码中使用了在 for 循环内初始化的字符串,另一方面,我使用的是在 for 循环外初始化的字符串,但仍然可以不同的答案
在 for 循环内初始化的字符串:
#include <iostream>
#include <string>
using namespace std;
int main() {
for (int i = 0; i < 10; i++) {
string TheString = "******";
if (i < 3 || i > 6)
TheString+= " ";
else {
TheString += "aaaaa";
}
cout << TheString << endl;
}
return 0;
}
输出是这个形状:
******
******
******
******aaaaa
******aaaaa
******aaaaa
******aaaaa
******
******
******
在for循环外初始化的字符串:
#include <iostream>
#include <string>
using namespace std;
int main() {
string TheString = "******";
for (int i = 0; i < 10; i++) {
if (i < 3 || i > 6)
TheString+= " ";
else {
TheString += "aaaaa";
}
cout << TheString << endl;
}
return 0;
}
输出是这个形状:
******
******
******
****** aaaaa
****** aaaaaaaaaa
****** aaaaaaaaaaaaaaa
****** aaaaaaaaaaaaaaaaaaaa
****** aaaaaaaaaaaaaaaaaaaa
****** aaaaaaaaaaaaaaaaaaaa
****** aaaaaaaaaaaaaaaaaaaa
我对正在发生的事情感到非常困惑,在此先感谢您。
解决方法
当你在循环内部初始化字符串时,字符串在每次迭代中都会被初始化。
换句话说,字符串在每次迭代开始时设置为 "******"
,然后添加一些内容。
另一方面,当你在循环外初始化字符串时,字符串只在循环之前初始化一次。
换句话说,字符串在进入循环之前被设置为 "******"
一次,并且在第二次或以后的迭代中对新字符串进行字符串的添加。