题解 | #字符串排序# 插入排序

字符串排序

https://www.nowcoder.com/practice/5190a1db6f4f4ddb92fd9c365c944584

#include <cctype>
#include <iostream>
using namespace std;

int main() {
    std::string str;
    getline(cin, str);
    int len = str.size();
    // 插入排序,稳定排序
    for (int i = 1; i < len; i++) {
        // 未排序区间的第一个元素作为基准元素
        char base = str[i];
        // 如果非英文字母,跳过
        if (!std::isalpha(base)) {
            continue;
        }
        // 已排序区间的右端点
        int j = i - 1;
        // 记录最后一次往前移动j时j的位置
        int lastJ = j + 1;
        // 遍历所有已排序区间
        while (j >= 0) {
            // 跳过不是字母的字符
            if (std::isalpha(str[j])) {
                // 大小写不敏感,统一转换为大写比较,如果比base大,往前挪动到字母字符的位置
                if (std::toupper(str[j]) > std::toupper(base)) {
                    str[lastJ] = str[j];
                    // 记录上一个字母字符的位置
                    lastJ = j;
                }
            }
            j--;
        }
        // 将base赋值到最后一个被挪动的j的位置
        str[lastJ] = base;
    }
    cout << str << endl;
}
// 64 位输出请用 printf("%lld")

全部评论

相关推荐

10-21 00:37
已编辑
门头沟学院 C++
小浪_Coding:你问别人,本来就是有求于人,别人肯定没有义务免费回答你丫, 有点流量每天私信可能都十几,几十条的,大家都有工作和自己的事情, 付费也是正常的, 就像你请别人搭把手, 总得给人家买瓶水喝吧
点赞 评论 收藏
分享
09-28 22:01
已编辑
广西科技大学 IT技术支持
合适才能收到offe...:找桌面运维?
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务