strcmp不受长度限制的字符串函数,strncmp受长度限制
查阅资料比较strncmp比strcmp多一个长度n的参数去控制比较的长度
两个函数都返回一个整数值去判断两个字符串谁大
下面简单实现
strcmp实现
int my_strcmp(const char* str1, const char* str2) { assert(str1 && str2); //断言判断一下str1和str2 while (*str1 || *str2) {//判断是否有字符串到'\0' if (*str1 != *str2) break; str1++; str2++; } return *str1 - *str2; //判断小于等于或大于0,来比较那个字符串大 }
strncmp的实现
int my_strncmp(const char* str1, const char* str2,int n) { assert(str1 && str2); //断言判断一下str1和str2 while (--n&&(*str1 || *str2)) {//判断是否有字符串到'\0' //用n纪录判断的字符数 if (*str1 != *str2) break; str1++; str2++; } return *str1 - *str2; //判断小于等于或大于0,来比较那个字符串大 }
通过比较可以发现strncmp相对于strcmp来说更为细致,strncmp
可以完成一些strcmp无法完成的任务
完整代码和样例测试
#include <iostream> using namespace std; #include <string> #include <assert.h> int my_strncmp(const char* str1, const char* str2,int n) { assert(str1 && str2); //断言判断一下str1和str2 while (--n&&(*str1 || *str2)) {//判断是否有字符串到'\0' //用n纪录判断的字符数 if (*str1 != *str2) break; str1++; str2++; } return *str1 - *str2; //判断小于等于或大于0,来比较那个字符串大 } int main() { char a[] = "abcd"; char b[] = "abd"; cout<<my_strncmp(a, b,2)<<endl; cout << strncmp(a, b,2); return 0; }
运行结果