用递归法解决句子逆序输出问题

版权声明:未经博主允许请勿转载 https://blog.csdn.net/hlz_12345/article/details/82596647

 

句子逆序输出,就是让用户输入一个英文句子,将这个句子逆着输出。比如说我输入“hello world”,那么输出就是“world hello”,当然实际实现的不只两个单词反掉这么简单。这道题首先要通过cin.getline函数来存储字符串,然后再把字符串传入某个函数实现逆序输出。重点在于这个函数实现所以前面怎么用getline,用char数组还是string的我就略过了。(以后也一样,简单的基本操作我会略过,直入重点)这道题有多种解法,目前我只想出来两种,一种是用指针,一种用递归。我先讲第一种用指针的常规思路(不写代码实现):

1.声明一个char指针p

2.通过strlen()函数来获取字符串长度,用一个循环来从字符串长度-1 往0逐步检阅,并且用一个变量cnt来记录这个循环进行了几次,如果遇到空格就把p指向这个空格,令其为'\0',把p移向下一个数组元素,这个时候我们就要开始输出这个句子里的最后一个单词了,用一个循环和cnt来控制p的移动和字符输出,循环结束后记得把p设为空指针,cnt=0

3。但是句子的第一个单词前是没有空格的,所以要另外处理。在逐步往前检阅的过程中如果循环变量为0了这个时候就直接输出字符串就好了,然后将字符数组的第一个元素设为'\0',p指针设为空指针。

4.当字符数组的第一个元素不为'\0'的时候,执行2-3的循环

递归法思路:

1.。。。2.。。。3.。。。

好了我们直接来看代码实现吧

void reverseout(char str[], int n){
	for(int m=n;m<(strlen(str)+1);m++)
	{
		if ('\0' == str[m])
		{
			for (n; n < m; n++)
			{
				cout << str[n];
			}
			cout << " ";
			break;
		}
		if (' ' == str[m])
		{
			reverseout(str, ++m);
			for (n; n < m; n++)
			{
				cout << str[n];
			}
			break;
		}
	}
	return;
}

猜你喜欢

转载自blog.csdn.net/hlz_12345/article/details/82596647