关系表达式的重点是关系运算符,有以下几个。
关系运算符 |
意义 |
> |
大于,即前者大于后者(以下略) |
< |
小于 |
== |
等于,“=”的意思是赋值 |
!= |
不等于 |
>= |
大于等于 |
<= |
小于等于 |
优先级:
关系运算符的优先级,比 运算符 的优先级低。
例如: a+1 > b; 先进行计算的是a+1,然后判断a+1>b是真还是假
C-风格字符串的表达式判断:
当我们判断一个变量是否等于1时,我们可以用 a==1;来进行判断,假如等于,返回true,假如不等于,返回false。
但是在C-风格字符串中,是不能这么做的。
原因在于,字符串的变量名,实际上是字符串的内存地址。
假如一个指针指向这个字符串内存地址,那么这个指针可以和这个字符串的变量名相等。
但是若两个字符串之间进行判断,那么就不用用“==”来进行判断了。
应使用函数strcmp(字符串1,字符串2)来进行判断,
假如相同,则返回值为0,
假如不等,则返回值为1.
注意,这个函数内的字符串1和字符串2,实际上是内存地址。即,这个函数通过内存地址来判断内存地址的值是否相等。
上代码:
#include<iostream> int main() { using namespace std; char aa[6] = "hello"; char bb[6] = "aello"; for (int i = 1;strcmp(aa, bb);i++) //strcmp(aa,bb)判断aa和bb是否相同,相同返回0,不同返回1。 //因为for的循环判断语句,返回值为true(1)则继续执行循环——即不同,返回值为false(0)则停止执行循环——即两个字符串相同 { bb[0] = char(char('a') + i - 1);//char('a')是字符a,他以数字编码形式储存在内存中,因此可以和int类型相加,更改为int('a')是等价的 //外面的char()是将里面的数字编码,以字符的形式显示出来,并赋值给bb字符串的第一个成员 cout << bb << endl; } system("Pause"); return 0; }
输出:
aello bello cello dello eello fello gello hello 请按任意键继续. . .
总结:
①可以这么理解:
strcmp(字符串1,字符串2)根据内存地址,判断字符串是否不同。
是不同,返回true——即1
是相同,返回false——即0
是不同,则继续执行循环语句
是相同,则不执行循环语句。
——不这样理解好别扭,这样理解也好别扭。
②按照说明,strcmp需要头文件<cstring>,但实际中,我没引用也可以正常使用啊?
③变种:
strcmp(字符串1,字符串2)==0;
这个表达式的意思就是,判断字符串是否相同:
相同,前面部分为0,表达式为1——继续执行循环语句
不同,前面部分为1,表达式为0——停止执行循环
和不带==0的刚好相反。
不带“==0”的,相同,停止执行。——用于需要相同字符串时
带“==0”的,相同,继续执行。——用于需要不同字符串时
string类字符串判断:
和C-风格字符串判断相比,要简单的多,可以直接用“==”或者“!=”关系判断符来判断两个string类字符串是否相同。
例如:
for (int i = 1;aa!=bb;i++)
只需要将前面的代码strcmp(aa,bb)改为aa!=bb;即可。
因为满足不等于,则执行循环,满足等于,则不执行循环。