题解 | #单词倒排#
单词倒排
https://www.nowcoder.com/practice/81544a4989df4109b33c2d65037c5836
#include <iostream>
#include <string>
using namespace std;
//翻转字符串
void reverse(string& str,int start,int end){
while(start<end){
char t=str[start];
str[start]=str[end];
str[end]=t;
start++;
end--;
}
}
int main() {
string str;
getline(cin,str);
int left=0;
for(int right=0;right<str.size();++right){//去除其他字符
if((str[right]<='Z'&&str[right]>='A')||(str[right]<='z'&&str[right]>='a')){
if(left>0) str[left++]=' ';
while(right<str.size()&&((str[right]<='Z'&&str[right]>='A')||(str[right]<='z'&&str[right]>='a')))
str[left++]=str[right++];
}
}
str.resize(left);
reverse(str,0,str.size()-1);//先整体翻转
left=0;
for(int left=0,right=0;right<=str.size();++right){//再逐单词翻转
if(str[right]==' '||right==str.size()){
reverse(str,left,right-1);
left=right+1;
}
}
cout <<str;
}
// 64 位输出请用 printf("%lld")
查看17道真题和解析