Online Compiler C

#include <stdio.h> int my_strcmp(char a[], char b[]){ int m=0,n=0,sum_a=0,sum_b=0; while(a[m]!='.'&&a[m]!='n'&&a[m]!='\0'){ sum_a+=a[m]; } while(b[n]!='.'&&b[n]!='n'&&b[n]!='\0'){ sum_b+=b[n]; } if(sum_a>sum_b){ return 1; }else if(sum_a==sum_b){ return 0; }return -1; } int main() { char dst[1000]="ab.",src[1000]="abd.",answer=0; answer=my_strcmp(dst,src); printf("%d",answer); return 0; }
这段代码试图实现一个字符串比较函数 `my_strcmp`,但逻辑和实现都有问题。它通过累加字符的ASCII码值来比较字符串,而不是按字典序逐个字符比较。此外,循环条件中检查 `'.'` 和 `'n'` 很奇怪,而且循环内没有更新索引变量,会导致死循环。

- 在 `while` 循环中,你没有更新 `m` 和 `n` 的值,所以循环会永远停留在第一个字符上,导致程序无法继续。你需要让索引递增才能遍历整个字符串。
- 字符串比较的标准做法是逐个字符比较它们的ASCII码,而不是求和。求和会丢失字符的顺序信息,比如 "ab" 和 "ba" 的和相同,但实际不相等。你应该直接比较对应位置的字符。