• C++中string对象之间比较、char*之间比较


    #include  //char* 使用strcmp
    #include  //string 使用compare
    #include 
    using namespace std;
    int main() {
        string stringStr1 = "42";
        string stringStr2 = "42";
        string stringStr3 = "213";
        cout << "stringStr1: " << stringStr1 << " " << "&stringStr1 :" << &stringStr1 << endl; // stringStr1: 42 &stringStr1 :0x648d3ff910
        cout << "stringStr2: " << stringStr2 << " " << "&stringStr2 :" << &stringStr2 << endl; // stringStr2: 42 &stringStr2 :0x648d3ff8f0
        cout << "stringStr3: " << stringStr3 << " " << "&stringStr3 :" << &stringStr3 << endl; // stringStr3: 213 &stringStr3 :0x648d3ff8d0
    
        //  string类对象,可以用"=="进行比较,值相等时表达式的值为1,不相等则为0
        bool stringStr1_stringStr2 = stringStr1 == stringStr2;
        cout << "stringStr1 == stringStr2: " << stringStr1_stringStr2 << endl; // stringStr1 == stringStr2: 1
        // 若两个string对象长度不同,而且较短的string对象的每个字符都与较长string对象对应位置上的字符相同,就说较短string对象小于较长string对象:
        // 若两个string对象在某些对应的位置上不一致,则string 对象比较的结果其实是string对象中第一对相异字符比较的结果:
        bool stringStr1_stringStr3 = stringStr1 > stringStr3;
        cout << "stringStr1 > stringStr3: " << stringStr1_stringStr3 << endl; // stringStr1 > stringStr3: 1
        // str1.compare(str2),如果返回值为0则表示两个字符串相等。 1表示>,2表示<;
        bool stringStr1_stringStr3_compare = stringStr1.compare(stringStr3);
        cout<<"stringStr1.compare(stringStr3): "<<stringStr1.compare(stringStr3)<<endl; // stringStr1.compare(stringStr3): 1
    
        cout<<"------------------------------------------------------------------"<<endl;
    
        char* charStr1 = "42";
        char* charStr2 = "42";
        char* charStr3 = "213";
        // (void*)charStr1表示"42"本身的地址
        cout << "charStr1: " << charStr1 << " " << "(void*)charStr1 :" << (void*)charStr1 << endl; // charStr1: 42 (void*)charStr1 :0x7ff623c55001
        cout << "charStr2: " << charStr2 << " " << "(void*)charStr2 :" << (void*)charStr2 << endl; // charStr2: 42 (void*)charStr2 :0x7ff623c55001
        cout << "charStr3: " << charStr3 << " " << "(void*)charStr3 :" << (void*)charStr3 << endl; // charStr3: 213 (void*)charStr3 :0x7ff623c55004
        // &charStr1表示指向"42"的指针的地址
        cout << "charStr1: " << charStr1 << " " << "&charStr1 :" << &charStr1 << endl; // charStr1: 42 &charStr1 :0x648d3ff8c8
        cout << "charStr2: " << charStr2 << " " << "&charStr2 :" << &charStr2 << endl; // charStr2: 42 &charStr2 :0x648d3ff8c0
        cout << "charStr3: " << charStr3 << " " << "&charStr3 :" << &charStr3 << endl; // charStr3: 213 &charStr3 :0x648d3ff8b8
        // charStr1和charStr2存的就是”42“第一个字符的地址
        cout << "charStr1: " << charStr1 << " " << "*charStr1 :" << *charStr1 << endl; // charStr1: 42 *charStr1 :4
        cout << "charStr2: " << charStr2 << " " << "*charStr2 :" << *charStr2 << endl; // charStr2: 42 *charStr2 :4
        cout << "charStr3: " << charStr3 << " " << "*charStr3 :" << *charStr3 << endl; // charStr3: 213 *charStr3 :2
    
        // "=="不能用于两个char类型字符串的比较,对于char类型字符串来说,"=="比较的是两个字符串的起始地址。相当于比较的(void*)charStr1 :0x7ff6a9d25001,是字符串本身的地址
        bool charStr1_charStr2 = charStr1 == charStr2;
        cout << "charStr1 == charStr2: " << charStr1_charStr2 << endl; // charStr1 == charStr2: 1,因为charStr1和charStr2都指向”42“,内容都是”42“的存储地址,所以相等,相当于地址之间的比较
        bool charStr2_charStr3 = *charStr2 == *charStr3;
        cout << "*charStr2 == *charStr3: " << charStr2_charStr3 << endl; // *charStr2 == *charStr3: 0
        // 比的是原字符串的地址,没有意思
        bool charStr1_charStr3 = charStr1 > charStr3;
        cout << "charStr1 > charStr3: " << charStr1_charStr3 << endl; // charStr1 > charStr3: 0
        // 跟string的比较方式类似,逐个字符进行比较
        bool charStr1_charStr3_strcmp = strcmp(charStr1,charStr3);
        cout << "strcmp(charStr1,charStr3): " << charStr1_charStr3_strcmp << endl; // strcmp(charStr1,charStr3): 1
    
    
        int a = "42" > "213";
        int b = strcmp("42" , "213"); //逐个字符比较
        cout<<"'42' > '213': "<<a<<endl;
        cout<<"strcmp(\"42\" , \"213\"): "<<b<<endl;
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • string对象之间直接用>或<进行比较是按照字符顺序逐个比较;
    • char*类型的字符串之间直接用>或<比较的话,比的只是地址,用strcmp()方法的话也是诸逐个字符进行比较。
  • 相关阅读:
    SQLi-LABS Page-2 (Adv Injections)
    上海华清远见
    IVIF:multi-scale densenet
    IDEA 新建 JavaWeb 项目(:找不到 Web Application 解决方法)
    探索设计模式:观察者模式
    C# HTML
    css选择器
    Collections和CollectionUtils集合操作
    Pytorch load模型出错:_pickle.UnpicklingError: invalid load key, ‘<‘.
    java.io.InvalidClassException(spark任务运行失败)
  • 原文地址:https://blog.csdn.net/weixin_44032178/article/details/132950867