#include<iostream> //导入iostream库,用于输入输出流操作
#include<cstdio> //导入cstdio库,用于printf、scanf等函数
#include<cmath> //导入cmath库,用于数学计算
#include<iomanip> //导入iomanip库,用于控制输出格式
#include<cstring> //导入cstring库,用于字符串操作
using namespace std; //使用命名空间std
int main(){ //程序从这里开始执行
string str1,str2; //定义两个字符串变量
str1="BABB"; //给第一个字符串变量赋值
str2="BBAA"; //给第二个字符串变量赋值
cout<<(str1>str2); //比较两个字符串大小并输出结果,如果第一个字符串大于第二个字符串则输出1,否则输出0
return 0; //程序结束并返回0
}
1,从这里可以看出str1和str2是直接进行比较的输出的结果为0,也就是布尔值里面的假,事实上str1小于str2,这算是字符串里的字典序的一种用途,那么为什么呢?
这里可以直接比较字符串,因为C++中的string类型已经重载了比较运算符,可以直接进行字符串的大小比较。字符串的比较规则是按照字典序进行比较,也就是逐个字符进行比较,如果相同就比较下一个字符,如果某一位不同,则根据ASCII码大小进行比较,具体规则可以参考C++中的字符串比较函数strcmp。
这里输出的是布尔值,因为C++中的bool类型只有两个值:true和false,1表示true,0表示false。当str1>str2时,表达式的结果为true,输出1;否则表达式的结果为false,输出0。
2,可是这里并没有设定布尔类型呀,难道string类型本身就具有这种比较的特性可以判断真假?
在C++中,string类型已经重载了比较运算符(包括 >、>=、<、<=、==、!=),可以直接进行字符串的大小比较。比较运算符的结果是一个bool类型的值,即true或false,所以输出的结果是布尔值。
在这个例子中,代码比较的是两个string类型的字符串变量,因此可以直接使用比较运算符,输出的结果就是一个bool类型的值。如果第一个字符串大于第二个字符串,则表达式的结果是true,输出1;否则表达式的结果是false,输出0。
因此,这段代码可以直接比较字符串并输出布尔值,不需要设置bool类型的变量。