自然排序算法1

#include <iostream>

#include <vector>

#include <algorithm>

#include <cctype>

#include <string>

// 比较两个字符串的自然排序的比较函数

bool naturalCompare(const std::string &a, const std::string &b) {

int i = 0, j = 0;

while (i < a.length() && j < b.length()) {

if (std::isdigit(ai) && std::isdigit(bj)) {

// 如果两个字符都是数字,则按数字的值进行比较

int valA = 0, valB = 0;

while (i < a.length() && std::isdigit(ai)) valA = valA * 10 + (ai++ - '0');

while (j < b.length() && std::isdigit(bj)) valB = valB * 10 + (bj++ - '0');

if (valA != valB) return valA < valB;

} else {

// 如果字符不是数字,则按字符的字典顺序进行比较

if (ai != bj) return ai < bj;

i++; j++;

}

}

return a.length() < b.length(); // 如果一个字符串是另一个字符串的前缀,则较短的字符串排在前面

}

int main() {

std::vector<std::string> strings = {"file10.txt", "file2.txt", "file1.txt", "file20.txt", "file3.txt"};

std::sort(strings.begin(), strings.end(), naturalCompare);

for (const auto &str : strings) {

std::cout << str << std::endl;

}

return 0;

}

相关推荐
磊 子15 小时前
STL无序关联容器—unorded_set+unorded_map
开发语言·c++
初夏睡觉15 小时前
数据结构学习之~二叉堆 (P3378 【模版】堆)
数据结构·c++·学习
云泽80815 小时前
笔试算法 - 链表篇(一):移除、反转、合并、回文判断全解析
数据结构·c++·算法·链表
小poop15 小时前
深入理解指针(中):数组与指针的进阶之旅
c++
朔北之忘 Clancy16 小时前
2026 年 3 月青少年软编等考 C/C++ 一级真题解析
c语言·开发语言·c++·青少年编程·题解·考级
小成2023032026516 小时前
C++~01面向对象基础
开发语言·c++
郝学胜-神的一滴17 小时前
干货版《算法导论》07:递归视角下的选择排序与归并排序
java·数据结构·c++·python·程序人生·算法·排序算法
暖焰核心18 小时前
C++内存管理和模板初阶
开发语言·c++
Irissgwe18 小时前
c++智能指针
开发语言·c++
西梅汁18 小时前
C++ 线程间通信(一)
c++