目录
strcmp与strncmp函数介绍
这两个字符函数的使用需包含头文件:
#include <string.h>
strcmp函数是C语言中的字符串比较函数,用于比较两个字符串的大小。其函数原型为:
int strcmp(const char *str1, const char *str2);
该函数返回值为整型,表示两个字符串的大小关系。如果str1小于str2,则返回值小于0;如果str1等于str2,则返回值等于0;如果str1大于str2,则返回值大于0。
strncmp函数也是C语言中的字符串比较函数,与strcmp函数类似,不同之处在于可以指定比较的字符个数。其函数原型为:
int strncmp(const char *str1, const char *str2, size_t n);
该函数的第三个参数n表示要比较的字符个数。如果n小于等于0,则表示比较整个字符串。其他规则与strcmp函数相同。
例如,假设有两个字符串str1和str2:
char str1[] = "abc";
char str2[] = "abd";则调用strcmp函数比较两个字符串的大小:
int result = strcmp(str1, str2);
result的值为-1,表示str1小于str2。如果调用strncmp函数比较两个字符串的前两个字符:
int result = strncmp(str1, str2, 2);
result的值为0,表示两个字符串的前两个字符相等。
strcmp函数模拟实现
实现步骤
1.在while循环中,让str1和str2中的字符比较,如果相等,两个字符指针往后走,比较下一对字符。
2.如果相等条件下,如果遇到了'\0',字符串比较结束,两个字符串相等,返回0。
3.如果没有返回0,则字符串不相等,将不相等的两个字符作差比较大小,返回差值*str1-*str2,
若*str1>*str2,*str1-*str2>0,返回大于0的数字;
若*str1<*str2,*str1-*str2<0,返回小于0的数字;
实现代码如下
int my_strcmp(const char* str1, const char* str2)
{
//判空
assert(str1 && str2);
while (*str1 == *str2)//两个字符相等,指针往后走
{
//指针往后走之前,判断是否遇到字符串结束标志'\0'
//否则指针一直往后走,造成越界访问
if (*str1 == '\0')//两个字符串都为'\0'了,比较结束,两个字符串相等
return 0;
str1++;
str2++;
}
//循环结束,字符串不相等
return *str1 - *str2;//作差法比较字符串大小,返回两个字符ASCII码值的差值
}
测试代码及运行截图
strncmp函数模拟实现
strncmp比strcmp多了一个参数size_t n,限制了字符串比较的个数,只需要在strcmp函数模拟实现的代码上稍作修改即可。
int my_strncmp(const char* str1, const char* str2, size_t n)
{
//判空
assert(str1 && str2);
//特殊情况n=0
if (n == 0)
return 0;//无字符比较,直接返回0
while (*str1 == *str2 && --n)//在while循环判断条件中,每比较一对字符,就让比较对数n-1
{
if (*str1 == '\0')
return 0;
str1++;
str2++;
}
//n=0或两个字符不相等时,跳出循环
return *str1 - *str2;
}
测试代码及运行截图
好了,以上就是所有strcmp和strncmp的函数介绍及模拟实现,在此感谢各位读者!