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循环部分。