strcmp函数与strncmp函数的学习

本文详细介绍了C语言中的strcmp和strncmp函数,包括它们的定义、参数、返回值和功能。strcmp用于全字符串比较,strncmp则用于指定字符数的前部比较,展示了函数原型和实际应用示例。
摘要由CSDN通过智能技术生成

strcmp函数

strcmp 函数的学习

strcmp是C语言中的一个标准库函数,用于比较两个C风格字符串(即以\0为结尾的字符数组)。这个函数在<string.h>头文件中定义。

函数原型

int strcmp(const char *s1, const char *s2);

参数

  • s1:第一个要比较的 C 字符串。
  • s2:第二个要比较的 C 字符串。

返回值

该函数返回一个整数,表示两个字符串的比较结果:

  • 如果 s1s2 是相同的,则返回0
  • 如果 s1 字典排序上小于 s2,则返回一个负整数。
  • 如果 s1 字典排序上大于 s2,则返回一个正整数。

函数功能

strcmp 函数用于比较两个字符串 s1s2。比较是基于字符的 ASCII 值进行的,按字典顺序逐字符比较两个字符串。如果两个字符串在某个位置上字符不同,函数就会根据这两个字符的 ASCII 值差异来决定返回值是正还是负。

参考代码

#include <stdio.h>
#include <string.h>

int main() {
    char ch1[100];
    char ch2[100];
    gets(ch1);
    gets(ch2);
    int a = strcmp(ch1, ch2);
    if (a > 0) {
        printf("ch1>ch2\n");
    } else if (a < 0) {
        printf("ch1<ch2\n");
    } else {
        printf("ch1=ch2\n");
    }

    return 0;
}

strcmp函数的模拟实现

参考代码

int my_strcmp(const char *c1, const char *c2) {
    assert(c1 && c2);
    while (*c1 == *c2) {
        if (*c2 == '\0') {
            return 0;
        }
        c1++;
        c2++;
    }

    return *c1 - *c2;
}

int main() {
    char ch1[] = {"apple"};
    char ch2[] = {"iphone"};
    int r = my_strcmp(ch1, ch2);
    printf("%d\n", r);
    return 0;
}

strnmp函数

strnmp 函数的学习

strncmp 是 C 语言中的一个函数,用于比较两个 C 字符串的前 n 个字符。该函数在 <string.h> 头文件中定义。

函数原型

int strncmp(const char *str1, const char *str2, size_t n);

参数

  • str1:第一个要比较的 C 字符串。
  • str2:第二个要比较的 C 字符串。
  • n:要比较的字符数。

返回值

该函数返回一个整数,表示两个字符串的比较结果:

  • 如果 str1 在前 n 个字符中小于 str2,则返回一个负整数。
  • 如果 str1 在前 n 个字符中等于 str2,则返回 0。
    如果 str1 在前 n 个字符中大于 str2,则返回一个正整数。

功能

strncmp 函数用于比较两个字符串 str1str2 的前 n 个字符。这个函数对于只需要比较字符串的一部分的情况非常有用,而不是比较整个字符串。例如,你可能只想检查两个字符串的开头是否匹配,或者你可能有一个具有特定格式的字符串,而你只对格式的一部分感兴趣。

示例

#include <stdio.h>  
#include <string.h>  
  
int main() {  
    char str1[15] = "abcdefghijklmn";  
    char str2[15] = "abcdefgopqrst";  
    int ret;  
  
    ret = strncmp(str1, str2, 5); // 只比较前5个字符  
    if(ret > 0) {  
        printf("str1 is greater than str2\n");  
    } else if(ret < 0) {  
        printf("str1 is less than str2\n");  
    } else {  
        printf("str1 is equal to str2\n");  
    }  
  
    return 0;  
}

strncmp函数的模拟实现

参考代码

int my_strncmp(const char *s1, const char *s2, size_t n) {
    while(n--) {
        if (*s1 != *s2)
            return *(const unsigned char *)s1 - *(const unsigned char *)s2;
        else if (*s1 == '\0')
            return 0;
        s1++;
        s2++;
    }
    return 0;
}

int main() {
    char str1[] = "Hello, World!";
    char str2[] = "Hello, norld!";
    char str3[] = "Hello, wniverse!";

    printf("Comparing str1 and str2: %d\n", my_strncmp(str1, str2, 10));  // Should print 0
    printf("Comparing str1 and str3: %d\n", my_strncmp(str1, str3, 10));  // Should print a negative number

    return 0;
}
  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值