C++ string字串比較方法詳解

2020-07-16 10:04:37
字串可以和型別相同的字串相比較,也可以和具有同樣字元型別的陣列比較。

Basic_string 類別範本既提供了  >、<、==、>=、<=、!= 等比較運算子,還提供了 compare() 函數,其中 compare() 函數支援多引數處理,支援用索引值和長度定位子串進行比較。該函數返回一個整數來表示比較結果。如果相比較的兩個子串相同,compare() 函數返回 0,否則返回非零值。

compare()函數

類 basic_string 的成員函數 compare() 的原型如下:

int compare (const basic_string& s) const;
int compare (const Ch* p) const;
int compare (size_type pos, size_type n, const basic_string& s) const;
int compare (size_type pos, size_type n, const basic_string& s,size_type pos2, size_type n2) const;
int compare (size_type pos, size_type n, const Ch* p, size_type = npos) const;

如果在使用 compare() 函數時,引數中出現了位置和大小,比較時只能用指定的子串。例如:

s.compare {pos,n, s2);

若參與比較的兩個串值相同,則函數返回 0;若字串 S 按字典順序要先於 S2,則返回負值;反之,則返回正值。下面舉例說明如何使用 string 類的 compare() 函數。

【例 1】
#include <iostream>
#include <string>
using namespace std;
int main ()
{
    string A ("aBcdef");
    string B ("AbcdEf");
    string C ("123456");
    string D ("123dfg");
    //下面是各種比較方法
    int m=A.compare (B); //完整的A和B的比較
    int n=A.compare(1,5,B,4,2); //"Bcdef"和"AbcdEf"比較
    int p=A.compare(1,5,B,4,2); //"Bcdef"和"Ef"比較
    int q=C.compare(0,3,D,0,3); //"123"和"123"比較
    cout << "m = " << m << ", n = " << n <<", p = " << p << ", q = " << q << endl;
    cin.get();
    return 0;
}
程式的執行結果為:

m = 1, n = -1, p = -1, q = 0

由此可知,string 類的比較 compare() 函數使用非常方便,而且能區分字母的大小寫。建議讀者多使用此函數。

比較運算子

String 類的常見運算子包括 >、<、==、>=、<=、!=。其意義分別為"大於"、"小於"、"等於"、"大於等於"、"小於等於"、"不等於"。

比較運算子使用起來非常方便,此處不再介紹其函數原型,讀者直接使用即可。下面以例 2 進行說明。

【例 2】
#include <iostream>
#include <string>
using namespace std;
void TrueOrFalse (int x)
{
    cout << (x?"True":"False")<<endl;
}

int main ()
{
    string S1 = "DEF";
    string CP1 = "ABC";
    string CP2 = "DEF";
    string CP3 = "DEFG";
    string CP4 ="def";
    cout << "S1= " << S1 << endl;
    cout << "CP1 = " << CP1 <<endl;
    cout << "CP2 = " << CP2 <<endl;
    cout << "CP3 = " << CP3 <<endl;
    cout << "CP4 = " << CP4 <<endl;
    cout << "S1 <= CP1 returned ";
    TrueOrFalse (S1 <=CP1);
    cout << "S1 <= CP2 returned ";
    TrueOrFalse (S1 <= CP2);
    cout << "S1 <= CP3 returned ";
    TrueOrFalse (S1 <= CP3);
    cout << "CP1 <= S1 returned ";
    TrueOrFalse (CP1 <= S1);
    cout << "CP2 <= S1 returned ";
    TrueOrFalse (CP2 <= S1);
    cout << "CP4 <= S1 returned ";
    TrueOrFalse (CP4 <= S1);
    cin.get();
    return 0;
}
程式執行結果為:

S1= DEF
CP1 = ABC
CP2 = DEF
CP3 = DEFG
CP4 = def
S1 <= CP1 returned False
S1 <= CP2 returned True
S1 <= CP3 returned True
CP1 <= S1 returned True
CP2 <= S1 returned True
CP4 <= S1 returned False

由上述內容可知,使用比較運算子可以非常容易地實現字串的大小比較。在使用時比較運算子時,讀者應注意,對於參加比較的兩個字串,任一個字串均不能為 NULL,否則程式會異常退出。