fork download
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <ctype.h>
  5.  
  6. int compare_filename(const char *a, const char *b) {
  7. int i = 0, j = 0;
  8.  
  9. while (a[i] != '\0' && b[j] != '\0') {
  10. // 如果两个字符都是数字,提取完整数字进行比较
  11. if (isdigit(a[i]) && isdigit(b[j])) {
  12. // 跳过前导零
  13. while (a[i] == '0') i++;
  14. while (b[j] == '0') j++;
  15.  
  16. // 提取数字值
  17. long num_a = 0, num_b = 0;
  18. while (isdigit(a[i])) {
  19. num_a = num_a * 10 + (a[i] - '0');
  20. i++;
  21. }
  22. while (isdigit(b[j])) {
  23. num_b = num_b * 10 + (b[j] - '0');
  24. j++;
  25. }
  26.  
  27. // 比较数字大小
  28. if (num_a < num_b) return -1;
  29. if (num_a > num_b) return 1;
  30. }
  31. // 如果两个字符都是字母,忽略大小写比较
  32. else if (isalpha(a[i]) && isalpha(b[j])) {
  33. char char_a = tolower(a[i]);
  34. char char_b = tolower(b[j]);
  35.  
  36. if (char_a < char_b) return -1;
  37. if (char_a > char_b) return 1;
  38.  
  39. i++;
  40. j++;
  41. }
  42. // 其他情况,按 ASCII 值比较
  43. else {
  44. if (a[i] < b[j]) return -1;
  45. if (a[i] > b[j]) return 1;
  46.  
  47. i++;
  48. j++;
  49. }
  50. }
  51.  
  52. // 处理一个字符串结束的情况
  53. if (a[i] == '\0' && b[j] == '\0') return 0;
  54. if (a[i] == '\0') return -1;
  55. return 1;
  56. }
  57.  
  58. // 测试函数
  59. int main() {
  60. // 测试用例1
  61. printf("测试用例1:\n");
  62. printf("a = \"grade1-class5-id5-zhangsan\"\n");
  63. printf("b = \"grade01-class10-id2-list\"\n");
  64. printf("期望输出: 1\n");
  65. printf("实际输出: %d\n\n", compare_filename("grade1-class5-id5-zhangsan", "grade01-class10-id2-list"));
  66.  
  67. // 测试用例2
  68. printf("测试用例2:\n");
  69. printf("a = \"grade2-class7-id2-wangwu\"\n");
  70. printf("b = \"grade2-class7-id15-zhaoliu\"\n");
  71. printf("期望输出: 1\n");
  72. printf("实际输出: %d\n\n", compare_filename("grade2-class7-id2-wangwu", "grade2-class7-id15-zhaoliu"));
  73.  
  74. return 0;
  75. }
  76.  
Success #stdin #stdout 0.01s 5288KB
stdin
Standard input is empty
stdout
测试用例1:
a = "grade1-class5-id5-zhangsan"
b = "grade01-class10-id2-list"
期望输出: 1
实际输出: -1

测试用例2:
a = "grade2-class7-id2-wangwu"
b = "grade2-class7-id15-zhaoliu"
期望输出: 1
实际输出: -1