感觉比较复杂
句子逆序
http://www.nowcoder.com/questionTerminal/48b3cb4e3c694d9da5526e6255bb73c3
首先先使用getline获取输入的字符("cin>>"读到空格会直接停止,这里算是一个坑);
获取完使用count计算空格数(单词的数量=空格+1);
创建blankpos数组用于存储空格位置;
获取完位置之后使用substr函数输出每一个单词,并在后面补充一个空格(这里我单独讨论了一下第一个和最后一个单词的情况)
#include<iostream> #include<string> using namespace std; int main(){ string s; getline(cin, s); int count=0; for(int i=0;i<s.size();i++){ if(s[i]==' '){ count++; } } int blankpos[count+2]; blankpos[0]=0; blankpos[count+1]=s.size()-1; int j=1; for(int i=0;i<s.size();i++){ if(s[i]==' '){ blankpos[j]=i; j++; } } for (int i = count + 1; i >= 1; i--) { if(blankpos[i-1]==0){ cout << s.substr(blankpos[i - 1], blankpos[i] - blankpos[i - 1]); } else if(blankpos[i]==s.size()-1){ cout << s.substr(blankpos[i - 1] + 1, blankpos[i] - blankpos[i - 1]) << " "; } else{ cout << s.substr(blankpos[i - 1] + 1, blankpos[i] - blankpos[i - 1] - 1) << " "; } } return 0; }