题解 | #单词倒排#
单词倒排
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")