自然排序算法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(a[i]) && std::isdigit(b[j])) {

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

int valA = 0, valB = 0;

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

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

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

} else {

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

if (a[i] != b[j]) return a[i] < b[j];

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;

}

相关推荐
￴ㅤ￴￴ㅤ9527超级帅11 分钟前
LeetCode hot100---二叉树专题(C++语言)
c++·算法·leetcode
_GR38 分钟前
每日OJ题_牛客_牛牛冲钻五_模拟_C++_Java
java·数据结构·c++·算法·动态规划
Death2001 小时前
Qt 中的 QListWidget、QTreeWidget 和 QTableWidget:简化的数据展示控件
c语言·开发语言·c++·qt·c#
六点半8881 小时前
【C++】速通涉及 “vector” 的经典OJ编程题
开发语言·c++·算法·青少年编程·推荐算法
coduck_S12004zbj1 小时前
csp-j模拟五补题报告
c++·算法·图论
Death2001 小时前
Qt 3D、QtQuick、QtQuick 3D 和 QML 的关系
c语言·c++·qt·3d·c#
sukalot2 小时前
windows C++-windows C++-使用任务和 XML HTTP 请求进行连接(二)
c++·windows
qianbo_insist2 小时前
simple c++ 无锁队列
开发语言·c++
zengy52 小时前
Effective C++中文版学习记录(三)
数据结构·c++·学习·stl
MinBadGuy3 小时前
【GeekBand】C++设计模式笔记5_Observer_观察者模式
c++·设计模式