仿写strncmp函数

2019-03-11  by 崔斐然


 int strncmp ( const char * str1, const char * str2, size_t n );
 【参数】str1, str2 为需要比较的两个字符串,n为要比较的字符的数目。
 字符串大小的比较是以ASCII 码表上的顺序来决定,此顺序亦为字符的值。strncmp()首先将s1 第一个字符值减去s2 第一个字符值,若差值为0 则再继续比较下个字符,直到字符结束标志'\0',若差值不为0,则将差值返回。例如字符串"Ac"和"ba"比较则会返回字符"A"(65)和'b'(98)的差值(-33)。注意:要比较的字符包括字符串结束标志'\0',而且一旦遇到'\0'就结束比较,无论n是多少,不再继续比较后边的字符。
 【返回值】若str1与str2的前n个字符相同,则返回0;若s1大于s2,则返回大于0的值;若s1 小于s2,则返回小于0的值。
 

 

/*
 int strncmp ( const char * str1, const char * str2, size_t n );
 【参数】str1, str2 为需要比较的两个字符串,n为要比较的字符的数目。
 字符串大小的比较是以ASCII 码表上的顺序来决定,此顺序亦为字符的值。strncmp()首先将s1 第一个字符值减去s2 第一个字符值,若差值为0 则再继续比较下个字符,直到字符结束标志'\0',若差值不为0,则将差值返回。例如字符串"Ac"和"ba"比较则会返回字符"A"(65)和'b'(98)的差值(-33)。注意:要比较的字符包括字符串结束标志'\0',而且一旦遇到'\0'就结束比较,无论n是多少,不再继续比较后边的字符。
 【返回值】若str1与str2的前n个字符相同,则返回0;若s1大于s2,则返回大于0的值;若s1 小于s2,则返回小于0的值。
 */

/*
print相关:
①%d格式:用来输出十进制整数。有以下几种用法:%d:按整型数据的实际长度输出。
⑤%c格式:输出一个字符。
⑥%s格式:用来输出一个串。%s:例如:printf("%s", "CHINA")输出"CHINA"字符串(不包括双引号)

指针中的相关参数理解:
    printf("%c\n",s1[0]);//从指针位置向后移动0位,带[]得到的就是地基上的内容
    printf("%c\n",*s1);//打印s1的全部内容,*一般表示全部,因为定义的是char类型,
                         打印单个字符这里打印出的第一个字符是空格。
                         如果一开始定义的是int或者string 类型则会打印整个串。
    printf("%d\n",&s1[0]);//&打印内存中的真实地址,真实地址是int类型整数
*/

#include <stdio.h>

int my_strncmp( const char * s1, const char * s2, int n){
    int i=0;
    while(i<n && s1[1]!='\0' && s2[i]!='\0' ){ //如果循环检测位数,当小于规定位数n,或者两者不为\0时候,执行如下步骤
        if (s1[i]-s2[i]==0) {//检查这一位是不是相等,若差值为0 i加1,意思是继续检查下一位
            i++;
        }
        else{
            return s1[i]-s2[i];//返回两个
        }
        
    }
    
    return 0;

}

int main()
{
    char *s1 = "1234a567";
    char *s2 = "1235d";
    int strncmp = my_strncmp(s1,s2,5);
    printf("%d", strncmp);
    return 0;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

崔斐然

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值