while与for
首先,while与for循环在某些场合是可以互相替代,但是,两者并不存在完全包含于的关系,否者多此一举作甚呢?
并且特别重要的一点:while(true)是循环输入的核心,这是for永远也替代不了的。
思考的出发点,源自于这道“字符串插入”的考题
描述
有两个字符串str和substr,str的字符个数不超过10,substr的字符个数为3。(字符个数不包括字符串结尾处的'\0'。)将substr插入到str中ASCII码最大的那个字符后面,若有多个最大则只考虑第一个。
输入
输入包括若干行,每一行为一组测试数据,格式为
str substr
输出
对于每一组测试数据,输出插入之后的字符串。
样例输入
abcab eee
12343 555
样例输出
abceeeab
12345553
我习惯性地使用for语句,理论上将一次输入当然没问题,但是当while嵌套while,两者都需要循环(也就是,一次输入后,能够重新开始,就不是for能够满足的了)
/*
字符串插入:
两个字符串str和substr,将substr字符串插入到str中ASCII码最大的那个字符后面
条件:
str字符个数不超过10
substr字符个数不超过3
*/
# include <iostream>
using namespace std;
int main() {
char str[14] = { 0 };
char substr[4] = { 0 };
while (cin >> str >> substr) {
int i = 0, posMax = 0;
char strMax = 0;
//for (int i = 0; i < 10; i++) {
// if (str[i] > strMax) {
// posMax = i;
// strMax = str[i];
// }
//知道最大的posMax位置后,可以将str上的字符进行移位了
//}
while (str[i]) {
if (str[i] > strMax) {
posMax = i;
strMax = str[i];
}
i++;
}
for (int j = 9; j > posMax; j--) {
str[j + 3] = str[j];
//移出三个空字符位
}
for (int z = 1; z < 4; z++) {
str[posMax + z] = substr[z - 1];
}
cout << str << endl;
}
return 0;
}
注意被注释掉的for循环部分。