strcat、strcpy、strcmp、strlen是C中针对字符串的库函数,这四个函数不安全,然后C针对这个情况整出strcat_s、strcpy_s、strncmp、strnlen_s(这个并不是替代stelen的)来弥补。而在C++中一般用string。
这篇文章主要讲:strncmp及strncmp的用法。
1 strcmp
1.1 函数功能
字典地比较string1和string2的大小。
1.2 函数声明、参数及返回值
头文件:
#include<string.h> (C) 、 #include<cstring>
声明:
int strcmp(const char *string1,const char *string2 );
参数:
string1、string2 -- 进行比较的字符串
返回值:(1)0:string和string相等
(2)>0:string1大于string2
(3)<0:string1小于string2
1.3 注意
(1)string1和string不能为nullptr,否则出错。
(2)strcmp是基于'\0'比较的,所以当字符串没有'\0'时,结果未定义。
1.4 代码演示
#include "stdafx.h"
#include <iostream>
#include <cstring>
int main(){
char str1[] = {'H', 'e', 'l','\0'};
char str2[] = {'H', 'e', 'l'};
int rlt = strcmp(str1, str2);
if (rlt == 0)
std::cout << "str1 == str2" << std::endl;
if (rlt > 0)
std::cout << "str1 > str2" << std::endl;
if (rlt < 0)
std::cout << "str1 < str2" << std::endl;
return 0;
}
结果显示:
str1 < str2
请按任意键继续. . .
int main(){
char str1[] = {'H', 'e', 'l'};
char str2[] = {'H', 'e', 'l'};
int rlt = strcmp(str1, str2);
if (rlt == 0)
std::cout << "str1 == str2" << std::endl;
if (rlt > 0)
std::cout << "str1 > str2" << std::endl;
if (rlt < 0)
std::cout << "str1 < str2" << std::endl;
return 0;
}
结果显示:
rlt随机值随机。所以str1 > str2 或 str1 < str2...
请按任意键继续. . .
1 strncmp
1.1 函数功能
字典地比较string1和string2的大小,可以指定要比较字符的数目。
1.2 函数声明、参数及返回值
头文件:
#include<string.h> (C) 、 #include<cstring>
声明:
int strncmp ( const char * string1, const char * string2, size_t n );
参数:
string1、string2 -- 进行比较的字符串
n -- 要比较的字符串数目
返回值:(1)0:string和string相等
(2)>0:string1大于string2
(3)<0:string1小于string2
1.3 注意
(1)string1和string不能为nullptr,如果n不为0,则出错。
(2)如果string和string2无空字符结尾,结果未定义。
3 C++ string类
string类中已经重载了 ==,<, >运算符,可以直接比较两个对象的大小。
#include "stdafx.h"
#include <iostream>
#include <string>
int main(){
std::string str1 = "Hellp";
std::string str2 = "Hell";
if (str1 == str2)
std::cout << "str1 == str2" << std::endl;
if (str1 > str2)
std::cout << "str1 > str2" << std::endl;
if (str1 < str2)
std::cout << "str1 < str2" << std::endl;
}
结果输出:
str1 > str2
请按任意键继续. . .
同样,如果用char*初始化string对象时,比较大小将是无定义的。
int main(){
//std::string str1 = {'1', '2', '\0'};
//std::string str2 = {'1', '2'};
char s1[] = { '1', '2' };
char s2[] = { '1', '2' };
std::string str1(s1);
std::string str2(s2);
if (str1 == str2)
std::cout << "str1 == str2" << std::endl;
if (str1 > str2)
std::cout << "str1 > str2" << std::endl;
if (str1 < str2)
std::cout << "str1 < str2" << std::endl;
}
输出结果:
无定义,可能是str1>str2,也有可能是str1<str2...
如果str1里有'\0',而str2中没有,比较结果为:str1 > str2...