c++STL库学习相关(一)
string对象的compare()方法
在学习string基本字符系列容器的过程中,遇到了使用compare方法比较字符串的大小,这里自己碰到了一点问题,记录一下。
之前看的资料都是简单地说字符串相等返回0,小于返回-1,大于返回1,实际操作了一下并不完全是这样的。
1、字符串的比较规则
首先搬运一下字符串比较的规则,总体来说有:
1、0-9 < A-Z < a-z,且为升序,如0比9小,A比Z小。
2、从第一个字符开始逐个比较,若遇到不等的字符则停止后续字符的比较,并按该字符大小关系返回比较结果;若长度相等且每个字符均相等则相等;若前一部分相等则长度更长的字符串更大。
2、实际的输出结果
- 若字符串相等,输出0;
- 若起始字符就不等,则大于输出1,小于输出-1;
- 若前一部分字符串相等:
字符串长度也相等,则按第一个不等字符的大小返回值输出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作为判断条件。
我自己做的测试是这样的,在查阅资料的时候没有见到过有关这个的具体说明,可能是看的资料不够细,也有可能是编译环境或者其他问题的原因,如有错误欢迎指正。