Coursera 学习记录:单词翻转(使用递归并通过空格分隔实现分段翻转)

版权声明:知识内容为原创思考,转载请注明:转自 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;
}

猜你喜欢

转载自blog.csdn.net/SmartLoveyu/article/details/83277539
今日推荐