题目描述
对字符串中的所有单词进行倒排。
说明:
1、每个单词是以26个大写或小写英文字母构成;
2、非构成单词的字符均视为单词间隔符;
3、要求倒排后的单词间隔符以一个空格表示;如果原字符串中相邻单词间有多个间隔符时,倒排转换后也只允许出现一个空格间隔符;
4、每个单词最长20个字母;
输入描述:
输入一行以空格来分隔的句子
输出描述:
输出句子的逆序
示例1
输入
I am a student
输出
student a am I
C++:
思路:建立数组存放元素,如果当前不是字母,直到下一个是字母时,存放空格;如果当前是字母,直到下一个不是字母,变换为字符串存放。另外判断首个元素是否是空格,是的话删除。最后倒序输出。
#include<iostream>
#include<string>
#include<ctype.h> //isalpha(),isspace()
#include<vector>
using namespace std;
int main()
{
string s;
while (getline(cin, s))
{
string output = "";
vector<string> result;
int n = s.size();
for (int i = 0; i < n; i++)
{
if (!(isalpha(s[i])))
{
if (i < n - 1 && isalpha(s[i + 1]))
result.push_back(" ");
}
else
{
string temp = "";
while (isalpha(s[i + 1]))
{
temp += s[i];
i++;
}
temp += s[i];
result.push_back(temp);
temp = "";
}
}
if (result[0] == " ") result.erase(result.begin()); //删除元素
for (int i = result.size() - 1; i >= 0; i--)
{
cout << result[i];
}
}
return 0;
}
Python:
思想:不是字母的替换空格,然后split()
,最后''.join()
while True:
try:
s = input()
for i in s:
if not i.isalpha():
s = s.replace(i, ' ')
print(' '.join(s.split()[::-1]))
except:
break