题解 | 优先队列#字符串排序#
字符串排序
https://www.nowcoder.com/practice/5190a1db6f4f4ddb92fd9c365c944584
/**
* @file HJ26(medi-字符串).cpp
* @author your name (you@domain.com)
* @brief 编写一个程序,将输入字符串中的字符按如下规则排序。
* 规则 1 :英文字母从 A 到 Z 排列,不区分大小写。
* 如,输入: Type 输出: epTy
* 规则 2 :同一个英文字母的大小写同时存在时,按照输入顺序排列。
* 如,输入: BabA 输出: aABb
* 规则 3 :非英文字母的其它字符保持原来的位置。
* 如,输入: By?e 输出: Be?y
* @version 0.1
* @date 2023-04-14
*
* @copyright Copyright (c) 2023
*
*/
#include<iostream>
#include<vector>
#include<queue>
#include<cctype>
using namespace std;
int main(){
string s;
getline(std::cin, s);
int n = s.size();
vector<char> res(n,'a');
//使用优先队列
priority_queue<pair<char, int>, vector<pair<char, int>>, greater<pair<char, int>> > mid; //默认排序方式是先以first排序再以second排序
for (int i =0; i<n; i++){
if(isalpha(s[i])){
char c = tolower(s[i]);
pair<char, int> p={c,i};
mid.push(p);
}
}
for (int i =0; i<n; i++){
if(!isalpha(s[i])){
cout << s[i];
}else{
int id = mid.top().second;
cout << s[id];
mid.pop();
}
}
return 0;
}