c\c++中比较两个字符串或string对象是否相等

c\c++中比较两个字符串或string对象是否相等
        在写程序的过程中,经常会遇到要比较两个字符串是否相等的情况。如果要比较的对象是char*字符串,则利用
int strcmp(const char* s1,const char* s2)
        当s1<s2时,返回为负数;
        当s1==s2时,返回值= 0;
        当s1>s2时,返回正数。
        即:两个字符串自左向右逐个字符相比(按ASCII值大小相比较),直到出现不同的字符或遇'\0'为止。如:
        "A"<"B" "a">"A" "computer">"compare"
        特别注意:strcmp(const char *s1,const char * s2)这里面只能比较字符串,即可用于比较两个字符串常量,或比较数组和字符串常量,不能比较数字等其他形式的参数。
        ANSI标准规定,返回值为正数,负数,0 。而确切数值是依赖不同的C实现的。
        如果要比较的对象是两个string,则利用函数compare()。若要比较string s1和s2则写为:s1.compare(s2),若返回值为0,则两者相等。
        注意:在比较两个字符串时不能利用符号“==”,“==”符号比较的是两个字符串的地址是否相等,此前在这个问题上犯过错误,谨记!谨记!
        若是比较两个字符,则可以用"=="直接进行比较~        

        但在比较两个string对象时是可以利用“==”的,相等的话,则表达式的返回值为1,不等为0。

举个简单的例子:
#include<iostream>
#include<string>
 
using namespace std;
 
int main() {
    char a[] = "aaa",b[]="aaa";
    string A = "AAA", B = "AAA";
    cout <<"*a和*b的值分别是:" <<*a << "," << *b << endl;
    cout <<"*“aaa”的值是:"<< *"aaa" << endl;
    cout <<"利用 == 比较a,b两个字符串,结果是(相等为1,不等为0):" <<(a==b) << endl;
    cout << "利用strcmp()比较a,b两个字符串,结果是(相等为0,不等非0):"<<strcmp(a,b) << endl;
    cout << "利用 == 比较A,B两个string,结果是(相等为1,不等为0):"<<(A==B) << endl;
    cout << "利用compare()比较A,B两个string,结果是(相等为0,不等非0):" << A.compare(B) << endl;
    //int x = 10;
    //void* p = &x;
    //cout << sizeof(void*) << " address" << p << endl;
    return 0;
}
输出结果为:

从程序中可以看到,在比较字符串不能用"=="的原因是字符串本身是一个地址,举例:

char a[]="aaa";
很容易理解a是一个指向字符串的指针,但同时也应该知道包含引号在内的"aaa"字符串本身也是一个地址,指向该字符串的首元素,故而会有 *"aaa"的结果为a。

对于string对象而言,则没这么多注意事项。。。
--------------------- 
作者:Allenlzcoder 
来源:CSDN 
原文:https://blog.csdn.net/Allenlzcoder/article/details/78254693 
版权声明:本文为博主原创文章,转载请附上博文链接!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值