1009 说反话 (20 分)

题目:1009 说反话 (20 分)

给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。

输入格式:

测试输入包含一个测试用例,在一行内给出总长度不超过 80 的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用 1 个空格分开,输入保证句子末尾没有多余的空格。

输出格式:

每个测试用例的输出占一行,输出倒序后的句子。

输入样例:

Hello World Here I Come

输出样例:

Come I Here World Hello
TIM截图20190116215013.png

首先给出我最初的想法实现,提交后只是部分答案正确,至于为什么有部分答案错误实在没弄清楚,如果你可以帮我看出来,请在评论区指出,谢谢。

#include <iostream>
#include<string>
using namespace std;

int main()
{	
	char str[81]=" ";
	cin.get(str, 81);
	int i,j;
	i = 80;
	while (str[i] == '\0') {
		i--;
	}
	j = i;
	i++;
	for (j;j > 0;j--) {
		if (str[j] == ' ') {
			int k = j;
			k++;
			for (k;k <= i;k++) {
				cout << str[k];
			}
			i = j;
		}
	}
	for (j;j < i;j++) {
		cout << str[j];
	}
	return 0;
}

本题的解题思路:

我们首先使用一个字符数组来接收含有空格的字符串,采用cin.get(字符数组名,接收字符数目)
再使用一个二维数组来对单词进行分隔,每一行代表一个单词,列号代表单词的输入顺序。
最后按列号逆序输出即可。

#include <iostream>
#include<string>
using namespace std;

int main()
{	
	char str[90][90];
	char in[90]=" ";
	int h = 0,l = 0;
	cin.get(in, 90);
	for (int i = 0;i < 90;i++) {
		if (in[i] != ' ') {
			str[h][l++] = in[i];
		}
		else {
			str[h][l] = '\0';
			h++;
			l = 0;
		}
	}int num = 0;
	while (h >= 0) {
		if (num > 0) {
			cout << " ";
		}
		num++;
		cout << str[h];
		h--;
	}
	return 0;
}

posted @ 2019-01-16 22:04  Chance-Zou  阅读(1658)  评论(0编辑  收藏  举报