感觉比较复杂

句子逆序

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;
}
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务