#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
int compare_filename(const char *a, const char *b) {
int i = 0, j = 0;
while (a[i] != '\0' && b[j] != '\0') {
// 如果两个字符都是数字,提取完整数字进行比较
// 跳过前导零
while (a[i] == '0') i++;
while (b[j] == '0') j++;
// 提取数字值
long num_a = 0, num_b = 0;
num_a = num_a * 10 + (a[i] - '0');
i++;
}
num_b = num_b * 10 + (b[j] - '0');
j++;
}
// 比较数字大小
if (num_a < num_b) return -1;
if (num_a > num_b) return 1;
}
// 如果两个字符都是字母,忽略大小写比较
if (char_a < char_b) return -1;
if (char_a > char_b) return 1;
i++;
j++;
}
// 其他情况,按 ASCII 值比较
else {
if (a[i] < b[j]) return -1;
if (a[i] > b[j]) return 1;
i++;
j++;
}
}
// 处理一个字符串结束的情况
if (a[i] == '\0' && b[j] == '\0') return 0;
if (a[i] == '\0') return -1;
return 1;
}
// 测试函数
int main() {
// 测试用例1
printf("a = \"grade1-class5-id5-zhangsan\"\n"); printf("b = \"grade01-class10-id2-list\"\n"); printf("实际输出: %d\n\n", compare_filename
("grade1-class5-id5-zhangsan", "grade01-class10-id2-list"));
// 测试用例2
printf("a = \"grade2-class7-id2-wangwu\"\n"); printf("b = \"grade2-class7-id15-zhaoliu\"\n"); printf("实际输出: %d\n\n", compare_filename
("grade2-class7-id2-wangwu", "grade2-class7-id15-zhaoliu"));
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHN0cmluZy5oPgojaW5jbHVkZSA8Y3R5cGUuaD4KCmludCBjb21wYXJlX2ZpbGVuYW1lKGNvbnN0IGNoYXIgKmEsIGNvbnN0IGNoYXIgKmIpIHsKICAgIGludCBpID0gMCwgaiA9IDA7CiAgICAKICAgIHdoaWxlIChhW2ldICE9ICdcMCcgJiYgYltqXSAhPSAnXDAnKSB7CiAgICAgICAgLy8g5aaC5p6c5Lik5Liq5a2X56ym6YO95piv5pWw5a2X77yM5o+Q5Y+W5a6M5pW05pWw5a2X6L+b6KGM5q+U6L6DCiAgICAgICAgaWYgKGlzZGlnaXQoYVtpXSkgJiYgaXNkaWdpdChiW2pdKSkgewogICAgICAgICAgICAvLyDot7Pov4fliY3lr7zpm7YKICAgICAgICAgICAgd2hpbGUgKGFbaV0gPT0gJzAnKSBpKys7CiAgICAgICAgICAgIHdoaWxlIChiW2pdID09ICcwJykgaisrOwogICAgICAgICAgICAKICAgICAgICAgICAgLy8g5o+Q5Y+W5pWw5a2X5YC8CiAgICAgICAgICAgIGxvbmcgbnVtX2EgPSAwLCBudW1fYiA9IDA7CiAgICAgICAgICAgIHdoaWxlIChpc2RpZ2l0KGFbaV0pKSB7CiAgICAgICAgICAgICAgICBudW1fYSA9IG51bV9hICogMTAgKyAoYVtpXSAtICcwJyk7CiAgICAgICAgICAgICAgICBpKys7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgd2hpbGUgKGlzZGlnaXQoYltqXSkpIHsKICAgICAgICAgICAgICAgIG51bV9iID0gbnVtX2IgKiAxMCArIChiW2pdIC0gJzAnKTsKICAgICAgICAgICAgICAgIGorKzsKICAgICAgICAgICAgfQogICAgICAgICAgICAKICAgICAgICAgICAgLy8g5q+U6L6D5pWw5a2X5aSn5bCPCiAgICAgICAgICAgIGlmIChudW1fYSA8IG51bV9iKSByZXR1cm4gLTE7CiAgICAgICAgICAgIGlmIChudW1fYSA+IG51bV9iKSByZXR1cm4gMTsKICAgICAgICB9IAogICAgICAgIC8vIOWmguaenOS4pOS4quWtl+espumDveaYr+Wtl+avje+8jOW/veeVpeWkp+Wwj+WGmeavlOi+gwogICAgICAgIGVsc2UgaWYgKGlzYWxwaGEoYVtpXSkgJiYgaXNhbHBoYShiW2pdKSkgewogICAgICAgICAgICBjaGFyIGNoYXJfYSA9IHRvbG93ZXIoYVtpXSk7CiAgICAgICAgICAgIGNoYXIgY2hhcl9iID0gdG9sb3dlcihiW2pdKTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGlmIChjaGFyX2EgPCBjaGFyX2IpIHJldHVybiAtMTsKICAgICAgICAgICAgaWYgKGNoYXJfYSA+IGNoYXJfYikgcmV0dXJuIDE7CiAgICAgICAgICAgIAogICAgICAgICAgICBpKys7CiAgICAgICAgICAgIGorKzsKICAgICAgICB9CiAgICAgICAgLy8g5YW25LuW5oOF5Ya177yM5oyJIEFTQ0lJIOWAvOavlOi+gwogICAgICAgIGVsc2UgewogICAgICAgICAgICBpZiAoYVtpXSA8IGJbal0pIHJldHVybiAtMTsKICAgICAgICAgICAgaWYgKGFbaV0gPiBiW2pdKSByZXR1cm4gMTsKICAgICAgICAgICAgCiAgICAgICAgICAgIGkrKzsKICAgICAgICAgICAgaisrOwogICAgICAgIH0KICAgIH0KICAgIAogICAgLy8g5aSE55CG5LiA5Liq5a2X56ym5Liy57uT5p2f55qE5oOF5Ya1CiAgICBpZiAoYVtpXSA9PSAnXDAnICYmIGJbal0gPT0gJ1wwJykgcmV0dXJuIDA7CiAgICBpZiAoYVtpXSA9PSAnXDAnKSByZXR1cm4gLTE7CiAgICByZXR1cm4gMTsKfQoKLy8g5rWL6K+V5Ye95pWwCmludCBtYWluKCkgewogICAgLy8g5rWL6K+V55So5L6LMQogICAgcHJpbnRmKCLmtYvor5XnlKjkvosxOlxuIik7CiAgICBwcmludGYoImEgPSBcImdyYWRlMS1jbGFzczUtaWQ1LXpoYW5nc2FuXCJcbiIpOwogICAgcHJpbnRmKCJiID0gXCJncmFkZTAxLWNsYXNzMTAtaWQyLWxpc3RcIlxuIik7CiAgICBwcmludGYoIuacn+acm+i+k+WHujogMVxuIik7CiAgICBwcmludGYoIuWunumZhei+k+WHujogJWRcblxuIiwgY29tcGFyZV9maWxlbmFtZSgiZ3JhZGUxLWNsYXNzNS1pZDUtemhhbmdzYW4iLCAiZ3JhZGUwMS1jbGFzczEwLWlkMi1saXN0IikpOwogICAgCiAgICAvLyDmtYvor5XnlKjkvosyCiAgICBwcmludGYoIua1i+ivleeUqOS+izI6XG4iKTsKICAgIHByaW50ZigiYSA9IFwiZ3JhZGUyLWNsYXNzNy1pZDItd2FuZ3d1XCJcbiIpOwogICAgcHJpbnRmKCJiID0gXCJncmFkZTItY2xhc3M3LWlkMTUtemhhb2xpdVwiXG4iKTsKICAgIHByaW50Zigi5pyf5pyb6L6T5Ye6OiAxXG4iKTsKICAgIHByaW50Zigi5a6e6ZmF6L6T5Ye6OiAlZFxuXG4iLCBjb21wYXJlX2ZpbGVuYW1lKCJncmFkZTItY2xhc3M3LWlkMi13YW5nd3UiLCAiZ3JhZGUyLWNsYXNzNy1pZDE1LXpoYW9saXUiKSk7CiAgICAKICAgIHJldHVybiAwOwp9Cg==