c++STL库string的compare()方法

c++STL库学习相关(一)

string对象的compare()方法

在学习string基本字符系列容器的过程中,遇到了使用compare方法比较字符串的大小,这里自己碰到了一点问题,记录一下。

之前看的资料都是简单地说字符串相等返回0,小于返回-1,大于返回1,实际操作了一下并不完全是这样的。

1、字符串的比较规则

首先搬运一下字符串比较的规则,总体来说有:

1、0-9 < A-Z < a-z,且为升序,如0比9小,A比Z小。

2、从第一个字符开始逐个比较,若遇到不等的字符则停止后续字符的比较,并按该字符大小关系返回比较结果;若长度相等且每个字符均相等则相等;若前一部分相等则长度更长的字符串更大。

2、实际的输出结果

  1. 若字符串相等,输出0;
  2. 若起始字符就不等,则大于输出1,小于输出-1;
  3. 若前一部分字符串相等:
    字符串长度也相等,则按第一个不等字符的大小返回值输出1或-1;
    字符串长度不等,则实际返回值输出的是多了或者少了几个字符长度。
    比如下面的测试用例,测试环境是Dev-c++:
#include <string> 
#include <iostream>
using namespace std;

int main(int argc, char** argv) {
string s1="cat";
    //首字符不同返回1或-1 
    cout<<endl;
    cout<<"cat与dog的比较结果为:"<<s1.compare("dog")<<endl;
    cout<<"cat与bogg的比较结果为:"<<s1.compare("bogg")<<endl;
    //字符串相等返回0
	cout<<"cat与cat的比较结果为:"<<s1.compare("cat")<<endl; 
	//前一部分字符串相等且长度相等返回1或-1 
	cout<<"cat与caa的比较结果为:"<<s1.compare("caa")<<endl; 
	cout<<"cat与cau的比较结果为:"<<s1.compare("cau")<<endl;
	//前一部分字符串相等但长度不等,实际输出多或少的字符个数 
	cout<<"cat与catgab的比较结果为:"<<s1.compare("catgab")<<endl; 
	cout<<"cat与c的比较结果为:"<<s1.compare("c")<<endl; 
	 return 0;
}

运行结果如下图:


可见在前一部分字符串相等且长度不等的情况下,实际输出的其实是多出或者少出的字符串长度,因此在调用compare()函数的时候,最好使用>0、<0、==0作为判断条件。

我自己做的测试是这样的,在查阅资料的时候没有见到过有关这个的具体说明,可能是看的资料不够细,也有可能是编译环境或者其他问题的原因,如有错误欢迎指正。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值