字符串排序(C++牛客网)

解题思路:

(1)保存字母并排序

(2)将非字母按顺序插入

#include<iostream>
#include<cctype>
#include<utility>
#include<vector>
#include<algorithm>
#include<string>

using namespace std;

int main() {
    string str;
    while(getline(cin,str)) {
        
        vector<pair<char,int>> v1,v2;
        for(int i=0;i<str.length();i++) {
            if(isalpha(str[i])) v1.push_back(pair(str[i],i));
            else v2.push_back(pair(str[i],i));
        }
        
        auto comp=[&](const pair<char,int> &a,const pair<char,int> &b) {
            if(tolower(a.first)<tolower(b.first)) return true;
            else if(tolower(a.first)>tolower(b.first)) return false;
            else if(a.second<b.second) return true;
            else return false;
        };
        
        sort(v1.begin(),v1.end(),comp);
        
        string s="";
        for(int i=0;i<v1.size();i++) {
            s+=v1[i].first;
        }
        
        for(int i=0;i<v2.size();i++) {
            s.insert(v2[i].second,1,v2[i].first);
        }
        cout<<s<<endl;
    }
    
    
    return 0;
}

猜你喜欢

转载自blog.csdn.net/coolsunxu/article/details/114837573