在线编译器 C

#include <stdio.h> int my_strlen(char s[]) { int i = 0; while (s[i] != '.' && s[i] != '\n' && s[i] != '\0') { i++; } return i; } int my_strcmp(char a[], char b[]) { int i = 0; int dif = 0; while (a[i] != '.' && b[i] != '.' && a[i] != '\n' && b[i] != '\n' && a[i] != '\0' && b[i] != '\0') { dif = a[i] - b[i]; if (dif < 0) { return -1; } if (dif > 0) { return 1; } i++; } int size_a = my_strlen(a); int size_b = my_strlen(b); if (size_a == size_b) { return 0; } if (size_a > size_b) { return 1; } if (size_a < size_b) { return -1; } } int main() { char a[] = "asass."; char b[] = "asas."; printf("%d", my_strcmp(a, b)); return 0; }
这段代码实现了一个自定义的字符串比较函数 `my_strcmp`,它比较两个字符串直到遇到句点、换行符或字符串结束符。主函数用两个示例字符串测试这个函数。

- 你的 `my_strcmp` 函数在循环中同时检查两个字符串的当前字符是否为终止条件,但循环条件要求两个字符串的当前字符都满足条件才继续。如果其中一个字符串先遇到终止符,循环会提前退出,但此时 `i` 可能指向不同位置,导致后续长度比较可能不准确。考虑当两个字符串长度不同时,循环条件可能无法正确判断谁先结束。

- 你的 `my_strlen` 函数计算字符串长度时也以句点或换行符为终止,但 `my_strcmp` 中比较长度时,应该使用相同的终止规则。注意在 `my_strcmp` 的循环结束后,`size_a` 和 `size_b` 的计算是基于 `my_strlen` 的,但此时 `i` 的位置可能已经超过了其中一个字符串的有效长度,导致长度比较结果与循环中的比较逻辑不一致。