C++ 使用 string 型態

直接操作字元陣列來進行字串操作是比較低階的行為,就如之前所說的,陣列本身對自己的長度沒有意識,所以無法判斷自己是否為空字串,而陣列也不能直接指定給另一個陣列,所以您無法直接將字串指定給另一個字串,您也無法對兩個字串直接進行串連的動作,例如:

char str1[] = "text1";

char str2[] = "text2";

str1 = str2; // error

cout << str1 + str2 << endl; // error



C++標準函式庫提供了string類別,您可以使用這個類別來建立實例,並進行各項高階的字串抽象行為,像是字串的指定、串接等,要使用string類別,您要先含入string表頭檔:

#include



您可以使用三種方式來建立一個string類別的物件(object),例如:

string str1; // 建立一個string物件,內容為空字串

string str2("caterpillar"); // 以字串常量建立字串

string str3(str2); // 以string實例建立字串



第一個建構字串的方法會建立一個空字串,空字串也是字串,只是長度為0;第二個方法會以字面常量內容來建立string實例;第三個方法會「複製」 str2的內容,並建立一個新的string實例。



您可以使用size()來測試字串長度,使用empty()來測試字串是否為空,使用==來比較兩個字串的字元內容是否相同,例如:




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

int main() { 
    string str1; 
    string str2("caterpillar"); 
    string str3(str2); 

    if(str1.empty()) {
        cout << "str1 為空字串" << endl;
    }

    cout << "str1 長度: " << str1.size() << endl;
    cout << "str2 長度: " << str2.size() << endl;
    cout << "str3 長度: " << str3.size() << endl;

    if(str1 == str2) {
        cout << "str1 與 str2 內容相同" << endl;
    }

    if(str3 == str2) {
        cout << "str3 與 str2 內容相同" << endl;
    }

    return 0; 
}


執行結果:

str1 為空字串

str1 長度: 0

str2 長度: 11

str3 長度: 11

str3 與 str2 內容相同



您可以將字串指定給另一個字串,例如:

string str1("text1");

string str2("text2");

....

str1 = str2;



這個指定會將str1原本的字串記憶體空間釋放,並重新配置足夠容納str2的記憶體空間,然後將str2的各個字元複製至str1;您也可以將一個C- Style的字串指定給string,例如:

string name("caterpillar");

char str[] = "justin";

name = str;



但是您不能將一個string實例指定給字元陣列,例如:

char str[] = "justin";

string name("caterpillar");

str = name; // error





您也可以直接使用+運算子來串接字串,例如:

str1 = str1 + str2;

str1 = str1 + "\n";



string的實例可以使用下標運算子[ ]指定索引來存取相對應位置的字元,就有如字元陣列的操作一般,例如:




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

int main() { 
    string name("caterpillar");

    for(int i = 0; i < name.size(); i++) {
        cout << name[i] << endl;
    }

    return 0; 
}


執行結果:

c

a

t

e

r

p

i

l

l

a

r



string類別所生成的物件擁有幾個常用的方法(method),例如:



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

int main() { 
    string str1; 
    string str2("caterpillar"); 
    string str3(str2); 

    // assign: 指定字串 
    str1 = str1.assign(str2, 0, 5); 
    cout << "str1: " << str1 << endl; 
    str1 = str1.assign("caterpillar", 5, 6); 
    cout << "str1: " << str1 << endl; 

    str1 = ""; 

    // append: 字串串接 
    str1 = str1.append(str2, 0, 5); 
    str1 = str1.append(str3, 5, 6); 
    cout << "str1: " << str1 << endl; 

    // find: 尋找字串位置 
    cout << "尋找str1中的第一個pill: " 
         << str1.find("pill", 0) << endl; 

    // insert: 插入字串 
    cout << "在str1插入字串***: " 
         << str1.insert(5, "***") << endl; 

    cout << "str1長度: " << str1.length() << endl; 

    return 0; 
}


執行結果:

str1: cater

str1: pillar

str1: caterpillar

尋找str1中的第一個pill: 5

在str1插入字串: caterpillar

str1長度: 14



以下簡單的說明上面幾個使用到的方法:



方法 說明
assign(string, start, num) 從string的第start個字元取出num個字元來指定給另一字串物件。
append(string, start, num) 從string的第start個字元取出num個字元來附加至另一字串物件之後。
find(string, 0) 從引發find的字串物件第0個字元尋找是否有符合string的子字串。
insert(start, string) 將string插入引發insert的字串物件第start個字元之後。
length() 傳回字串的長度。


以上的幾個方法都是重載(Overload)多次的方法,另還有其它的方法,例如compare()等等,更多的參數與方法使用請參考C++相關線上文件。原文链接: https://www.cnblogs.com/nickchan/archive/2012/06/06/3104415.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/52074

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月9日 上午3:34
下一篇 2023年2月9日 上午3:35

相关推荐