版权声明:未经博主允许请勿转载 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;
}