#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;
}