coursera C程序进阶习题 第三周#1单词翻转

来源:互联网 发布:51单片机项目 编辑:程序博客网 时间:2024/06/09 17:13

题目:

输入一个句子(一行),将句子中的每一个单词翻转后输出。

输入

只有一行,为一个字符串,不超过500个字符。单词之间以空格隔开。所谓单词指的是所有不包含空格的连续的字符。

这道题请用cin.getline输入一行后再逐个单词递归处理。

输出

翻转每一个单词后的字符串,单词之间的空格需与原文一致。

分析:这道题要求的是把每一句话中的单词进行翻转,而不是把句子进行翻转(这种只需数组倒序输出即可)。 题目要求用递归来处理,而递归的特性就是先运行的函数后出结果。而这里比较特殊的是,空格却是和原来一样输出的,也就是原来空格在什么地方,运行后仍然在什么地方。
于是这样建立递归:遇到空格直接返回,遇到非空格非’\0’,执行下一个递归函数,执行完后,输出一个字符。
具体代码如下:

#include<iostream>using namespace std;int i = 0;char input[501];int recur(){    char c = input[i];    i++;    if (c == ' '){        return 1;    }    else if (c!=' '&&c!='\0'){        recur();        cout << c;    }    return 1;}int main(){    cin.getline(input, 501);    while (input[i] != '\0'){        if (recur() == 1){            cout << ' ';        }    }    cout << endl;    return 0;}

以上,利用递归的性质,先执行的函数后输出的特性,就可以把先存到c里的字符后输出,实现单词翻转,然而,遇到空格这样的特殊情况,则直接return,等到所有的递归执行完后,再来输出空格。再利用while循环,可以实现多个单词的输出。

阅读全文
0 0
原创粉丝点击