题目描述

输入一个英文句子,翻转句子中单词的顺序,但单词内部的字符顺序保持不变。句子中的单词以空格分隔。为了简化处理,标点符号与普通字母一视同仁。

例如,输入 I am a student.,则输出 student. a am I

解题思路

按空格把句子切分成若干个单词,保留每个单词的原始字符顺序,再按相反的顺序把它们依次输出即可。

参考实现

/*by hk 15-7-1*/



#include <iostream>
#include<vector>
#include<fstream>
using namespace std;


int main(int argc, char *argv[])
{
	vector<string> data;
	string ss;
	char str[100];

	cin.getline(str,100);

		/*其实利用文件没必要,多此一举 可直接>>*/
	ss=str;
	ofstream out("tmp.txt");
	out<<ss;
	out.close();

	string tmp;
	ifstream in("tmp.txt");

	while(in>>tmp)
	{
		data.push_back(tmp);
	}

	in.close();

	for(int i=data.size()-1;i>=0;i--)
	{
		cout<<data[i]<<" ";
	}


	return 0;
}

.

说明:上面这份实现借助临时文件 tmp.txt 中转输入,其实完全没有必要,可以直接用 stringstream 或者 cin >> 按空格逐个读取单词,再逆序输出,代码会更简洁。