C字符串操作strcmp/strncmp详解

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...

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值