题解 | 字符串排序

#include <algorithm>
#include <cctype>
#include <iostream>
#include <string>
#include <vector>
using namespace std;
string sortString(const string& input) {
    // 提取字母字符及其原始位置
    vector<pair<char, size_t>> letters;
    for (size_t i = 0; i < input.size(); ++i) {
        if (isalpha(input[i])) {
            letters.emplace_back(input[i], i);
        }
    }

    // 排序字母字符(不区分大小写)
    sort(letters.begin(), letters.end(), [](const pair<char, size_t>& a,
    const pair<char, size_t>& b) {
        char lowerA = tolower(a.first);
        char lowerB = tolower(b.first);
        if (lowerA != lowerB) {
            return lowerA < lowerB; // 按字母顺序排序
        } else {
            return a.second < b.second; // 保持输入顺序
        }
    });

    // 重新构建字符串
    string result = input;
    size_t letterIndex = 0;
    for (char & i : result) {
        if (isalpha(i)) {
            i = letters[letterIndex++].first;
        }
    }

    return result;
}
int main() {
    string input;
    getline(cin, input);
    cout<<sortString(input);
   
}
// 64 位输出请用 printf("%lld")

全部评论

相关推荐

04-15 23:42
中山大学 Java
ResourceUtilization:过几天楼主就会捧着一堆offer来问牛友们该怎么选辣
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务