版权声明:知识内容为原创思考,转载请注明:转自 https://blog.csdn.net/SmartLoveyu/article/details/83277539
描述
输入一个句子(一行),将句子中的每一个单词翻转后输出。
输入
只有一行,为一个字符串,不超过500个字符。单词之间以空格隔开。所谓单词指的是所有不包含空格的连续的字符。
这道题请用cin.getline输入一行后再逐个单词递归处理。
输出
翻转每一个单词后的字符串,单词之间的空格需与原文一致。
打印要求:
hello wrold
olleh dlrow
cin.getline的用法
// istream::getline example
#include <iostream> // std::cin, std::cout
int main () {
char name[256], title[256];
std::cout << "Please, enter your name: ";
std::cin.getline (name,256);
std::cout << "Please, enter your favourite movie: ";
std::cin.getline (title,256);
std::cout << name << "'s favourite movie is " << title;
return 0;
思路
为什么使用递归可以实现逆序打印呢?
先调用,再打印,那么每次打印之前都会调用一次,那么当全部调用结束,函数往下运行时:就会后调用的先打印。
#include<iostream>
using namespace std;
char word[500];
int i = 0;
// 全局变量,所以在此定义,否则将无法运行
// 使用cin.getline
/*
以下程序打印输出为
hello world
dlorw olleh
int reverse() {
char m = word[i];
i++;
if (m != '\0') {//特别注意是右斜杠,否则会出错
reverse();
cout << m;
}
return 1;
}
int main() {
cin.getline(word, 500);
reverse();
return 0;
}
所以需要对于出现的空格做出调整
*/
int reverse() {
char m = word[i];
i++;
if (m == ' ') {
//如果遇到的是空格,那就返回一个值,来表示是空格
return 1;
}
if (m !=' ' && m != '\0') {//特别注意是右斜杠,否则会出错
reverse();
cout << m;
return 1;//这里的返回值也需要为1,为什么?
//因为递归的过程,相当于层层嵌套,如果这里没有return或者return=0,那么当这个函数结束返回时,就会少一次空格的记录。
}
}
int main() {
cin.getline(word, 500);
while (word[i] != '\0') {
if (reverse() == 1) {
cout << ' ';//如果第二个为return 0,结果会少一个空格
}
}
return 0;
}