題目描述
對字元串中的所有單詞進行倒排。
說明:
1、每個單詞是以26個大寫或小寫英文字母構成;
2、非構成單詞的字元均視為單詞間隔符;
3、要求倒排後的單詞間隔符以一個空格表示;如果原字元串中相鄰單詞間有多個間隔符時,倒排轉換後也隻允許出現一個空格間隔符;
4、每個單詞最長20個字母;
輸入描述:
輸入一行以空格來分隔的句子
輸出描述:
輸出句子的逆序
示例1
輸入
I am a student
輸出
student a am I
代碼1:
//第三十一題 【中級】單詞倒排
#include<iostream>
#include<string>
#include<vector>
using namespace std;
int main()
{
string in_str;
while (getline(cin, in_str))
{
vector<string>vOut;
size_t ePosition, sPosition = in_str.length() - 1;
size_t iLegth = sPosition;
for (int i = 0; i < in_str.length(); i++)
{
if (!isalpha(in_str[i]))
{
in_str[i] = ' ';
}
}
while ((ePosition = in_str.find_last_of(' ', sPosition)) != string::npos)
{
int lenght = sPosition - ePosition;
if (lenght > 0)
{
vOut.push_back(in_str.substr(ePosition + 1, lenght));
}
if (ePosition != 0)
sPosition = ePosition - 1;
else
{
sPosition = 0;
break;
}
}
if (sPosition != 0)
vOut.push_back(in_str.substr(0, sPosition + 1));
else if (isalpha(in_str[sPosition]))
{
char ctemp= in_str[0];
string temp;
temp = ctemp;
vOut.push_back(temp);
}
string sOut;
int iMax = vOut.size() - 1;
for (int i = 0; i < iMax; i++)
{
cout<<vOut[i].c_str()<<" ";
}
cout << vOut[iMax].c_str()<<endl;
}
return 0;
}