1. 程式人生 > >C++中string型別與char*型別的字串比較剖析

C++中string型別與char*型別的字串比較剖析

C++中的string字串可以直接進行比較,事實上strcmp()的兩個引數是char*型別的,也就是說是比較C字串的(即char陣列),於是就不能用於比較string型別了

int strcmp( const char *string1, const char *string2 );

Value    Relationship of string1 to string2 
< 0       string1 less than string2 
 0        string1 identical to string2 
> 0       string1 greater than string2


但是string物件通過string類的方法  c_str() 就是可以進行比較的了  

string型別的直接比較  strcmp比較char*字串或者是通過c_str()轉換來的char*字串  都是比較ASCII碼  

如果直接比較char*字串的話就會發現  是在比較記憶體中的位置,在前者較大

#include <iostream>
#include<cstring>
using namespace std;

int main()
{
    string s  = "abc";
    string s1 = "abd";

    if(s<s1)
    cout<<"string 型別 s = abc s1 = abd 直接比較   s小於s1"<<endl<<endl;

    if(strcmp(s.c_str(),s1.c_str())<0)
     cout<<"string 型別 s = abc s1 = abd 用c_str()轉換成char*後strcmp比較 s小於s1"<<endl<<endl;

    cout<<"char* 陣列比較"<<endl<<endl;

    char s2[10] = "abc";
    char s3[10] = "def";
    if(strcmp(s2,s3)<0)
    cout<<"strcmp比較  s2小於s3"<<endl<<endl;

    if(s2>s3)
    cout<<"直接比較s2大於s3,明顯是按照地址先後進行比較的";
    return 0;
}

以上是例程