使用strcmp()函数比较字符串

本文介绍了一个使用C语言编写的简单程序,该程序通过输入两个字符串,并利用strcmp函数来比较这两个字符串是否相同。如果字符串相同,则返回0;如果不相同,则返回正数或负数。
#include <stdio.h>
#include <string.h>

int main(){
  char str1[80], str2[80];
  int x;
  
  for(;;){
    puts("\n\nInput the first string, a blank to exit: ");
    gets(str1);
    if(strlen(str1) == 0){
      break;
    }
    puts("\nInput the second string: ");
    gets(str2);
    // 比较输入的两个字符串并显示结果
    x = strcmp(str1, str2);
    printf("\nstrcmp(%s, %s) returns %d", str1, str2, x); 
  }
  return 0;
}


转载于:https://my.oschina.net/u/241930/blog/521397

### strcmp 函数的返回值及其意义 `strcmp` 是 C 语言标准库 `<string.h>` 中的一个函数,其主要作用是比较两个字符串的内容并返回它们的关系。它的函数原型定义为: ```c int strcmp(const char *str1, const char *str2); ``` #### 返回值的意义 - 如果 `str1` 和 `str2` 完全相等,则返回 **0**[^1]。 - 如果 `str1` 小于 `str2`(基于 ASCII 值逐字符比较),则返回一个小于零的负整数值[^3]。 - 如果 `str1` 大于 `str2`,则返回一个大于零的正整数值。 这种比较方式遵循字典顺序原则,即从左至右逐一比较对应位置上的字符ASCII码值,直到发现不匹配的字符或遇到字符串终止符 `\0`。 --- ### 使用示例 以下是几个典型的例子来展示 `strcmp` 的实际应用效果: ```c #include <stdio.h> #include <string.h> int main(void) { char *a = "English"; char *b = "ENGLISH"; char *c = "english"; printf("strcmp(a, b): %d\n", strcmp(a, b)); // 输出非零值,因为 'E' 和 'e' 不同 printf("strcmp(a, c): %d\n", strcmp(a, c)); // 输出正值,因大写字母优先级低于小写 printf("strcmp(\"abc\", \"abcd\"): %d\n", strcmp("abc", "abcd")); // 输出 -1,因第一个更短 return 0; } ``` 上述代码展示了不同情况下 `strcmp` 的行为特点[^2]。 --- ### 自定义实现 `strcmp` 功能 为了更好地理解内部机制,可以尝试手动编写一个类似的函数。下面是一个简单的自定义版本: ```c int custom_strcmp(const char *s1, const char *s2) { while (*s1 && (*s1 == *s2)) { // 当两者当前字符相同且未到达结尾时继续循环 s1++; s2++; } return *(unsigned char *)s1 - *(unsigned char *)s2; // 计算差异 } // 测试代码 int main() { char *ch1 = "hello"; char *ch2 = "HELLO"; printf("custom_strcmp result: %d\n", custom_strcmp(ch1, ch2)); return 0; } ``` 此方法通过逐步遍历两字符串直至找到首个不同的字符或任一字符串结束标志位来进行判断[^4]。 --- ### 注意事项 需要注意的是,在调用 `strcmp` 进行比较之前应确保传入的有效指针指向合法内存区域内的 NULL 终止字符串;否则可能导致不可预期的行为甚至程序崩溃。 另外值得注意的一点在于大小写的敏感度——即使仅存在字母大小写区别也会被视作完全不一样的两条记录处理。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值