(七十一)关系表达式

来源:互联网 发布:mysql触发器 动态表名 编辑:程序博客网 时间:2024/05/21 17:52

关系表达式的重点是关系运算符,有以下几个。

关系运算符

意义

>

大于,即前者大于后者(以下略)

<

小于

==

等于,“=”的意思是赋值

!=

不等于

>=

大于等于

<=

小于等于

 

优先级:

关系运算符的优先级,比 运算符 的优先级低。

例如: 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;}


输出:

aellobellocellodelloeellofellogellohello请按任意键继续. . .

总结:

①可以这么理解:

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;即可。

因为满足不等于,则执行循环,满足等于,则不执行循环。

 



0 0
原创粉丝点击