用c语言strncmp函数,strcmp和strncmp函数

本文详细介绍了C语言中的strcmp和strncmp函数,用于比较字符串。strcmp函数比较两个字符串直到找到不同字符或遇到空字符,返回值表示字符串间的大小关系。strncmp函数则在比较指定数量的字符后停止,其余功能与strcmp相同。文中还提供了这两个函数的自定义实现,并通过示例展示了其使用和运行结果。
摘要由CSDN通过智能技术生成

1.strcmp

This function starts comparing the first character of each string. If they are equal to each other, it continues with the following pairs until the characters differ or until a terminating null-character is reached.//摘自msdn

此函数开始比较每个字符串的第一个字符。如果它们彼此相等,则继续使用以下对,直到字符消失或达到终止的空字符为止

注意:

返回值

str1 str2

1

>

0

=

-1

<

1.第一个字符串大于第二个字符串,则返回大于0的数字

2.第一个字符串等于第二个字符串,则返回0

3.第一个字符串小于第二个字符串,则返回小于0的数字

int my_strcmp(const char* str1, const char* str2)

{

const unsigned char* src1 = (const unsigned char*)str1;

//强转成const unsigned char* 是为了下面两个指针的值的ascii相减

const unsigned char* src2 = (const unsigned char*)str2;

int ret = 0;

assert(src1 != NULL && src2 != NULL);

while (!(*src1 - *src2) && *src2)//如果两个值不相等或*src2的ascii为0,

{//(*src1-*src2,所以如果*src2的ascii的值为0,那*src1就比*src2大或相等,显然结果就已知了,退出循环),

//就继续判断, 否则,求出相减的值并退出循环

src1++, src2++;

}

ret = (*src1 - *src2);

if (ret < 0)

{

return -1;

}

else if (ret>0)

{

return 1;

}

return (ret);

}

int main()

{

char str1[20]= "abcd";

char str2[20] = "abcdef";

printf("%d\n",my_strcmp(str1, str2));

return 0;

}

运行结果:

0fc8c24cca62f942355d42a33eb912ef.png

2.strncmp

strncmp比较两个字符串前n个字符,其他内容和strcmp一样。

int my_strncmp(const char* str1, const char* str2,size_t n)//比较两个字符串前n个字符

{

const unsigned char* src1 = (const unsigned char*)str1;

//强转成const unsigned char* 是为了下面两个指针的值的ascii相减

const unsigned char* src2 = (const unsigned char*)str2;

int ret = 0;

assert(src1 != NULL && src2 != NULL);

while (!(*src1 - *src2) && *src2 && n > 0 )//如果两个值不相等或*src2的ascii为0,

{//(*src1-*src2,所以如果*src2的ascii的值为0,那*src1就比*src2大或相等,显然结果就已知了,退出循环),

//就继续判断, 否则,求出相减的值并退出循环

src1++, src2++,n--;

}

ret = (*(--src1) - *(--src2));//比较n个字符指针移动到了n+1个位置,-1返回n的范围内

if (ret < 0)

{

return -1;

}

else if (ret>0)

{

return 1;

}

return (ret);

}

int main()

{

char str1[20]= "abcd";

char str2[20] = "abcdef";

printf("%d\n",my_strncmp(str1, str2,4));

return 0;

}

运行结果:

47b124eb3341b1b693159601a6e7e6dc.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值