题解 | 字符串排序

#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")

全部评论

相关推荐

05-07 13:29
已编辑
门头沟学院 Java
北斗导航Compass低仿版:能不能先搞清楚优先级啊,怎么可能是项目问题,项目很重要吗?又没学历 又没实习大厂凭啥约面?那玩具项目 没应用在真实生产环境下的 就算做上天又有什么用?早点找个小公司实习 拿小公司实习去投大厂实习,这才是你现在该做的
投递美团等公司9个岗位 简历被挂麻了,求建议
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务