题目描述

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

例如,输入 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 >> 按空格逐个读取单词,再逆序输出,代码会更简洁。