[ 永遠的UNIX::UNIX技術資料的寶庫 ]   GB | BIG5

首頁 > 編程技術 > C/C++ > 正文
標準C程式庫--標準樣版庫-字串樣版
http://home.pchome.com.tw/computer/cpp2000/ (2001-06-01 11:00:00)

過去幾年以來,C++ 程式語言的標準語言定義程序經歷了一個大改變。此標準化程序便是標準資料結構庫的產生,此程式庫通常稱為「標準樣版庫」( Standard Template Library ) 或 STL 。由於 STL 是 C++ 語言定義的一部份,因此使用 STL 的程式應該享有高度可植性,因為任何標榜支援 " 標準C++" 的編譯程式都必須提供 STL 實作。

疊代字只是一種類似指標的物件,可以用來循環存取容器中的所有元素。由於不同的演算法需要以個種不同的方式來遊歷容器,因此有各種不同的疊代子形式。標準樣版庫中的每個容器類都提供一種疊代子,適合和實作容器所用的儲存技巧配合使用。

除了數字以外,字元與字串可能是程式設計中最常用的資料值。基本 C++ 語言一沒有將字串當成一種基本型態,而是沿襲其前身 C 語言,以指標與字元陣列來實作字串,基於這個理由, string 資料型態被視為樣版類別的一個合理的候選者。要使用 string 資料型態,必須引入 string 檔 ( 不含 .h 附加名 )

#incldue 

利用 basic_string 樣版定義兩個類別:

typedef basic_string  string;    // 8 位元的字串
typedef basic_string  wstring;    // 16 位元的字串

宣告及初始化
樣版宣告

template , class Allocator = allocator >
class basic_string;

建構子函式

string s1;
string s2 ("a string");
string s3 = "initial value";
string s4 (s3);        // 字串抽象的拷貝建構函式可以將一個新建立字串
                        //  的初值設定成另一字串所儲存的值。

string s7 (10, '\n');            // 將所有字元填上  'n'

Top

字串長度
 有幾個成員函式可以取得或改變字串的長度。

length    傳回一個整數值,代表字串目前所儲存的字元個數。

resize    改變字串的大小,可能從尾端去多餘的字元,也可能插入新的字元。

empty    字串沒有包含任何字元,便傳回 true  。  

reserve     改變緩區的大小。

max_size   傳回 string  最大的空間大小

size    傳回一個整數值,代表字串目前所儲存的字元個數。

capacity    傳回緩區的大小。

Top

指派、加入和置換
有幾個成員函式負責這些功能,並且重載了一些運算子。

=    指派運算子,參數可以是 string 物件、字串、字元。

+=    指派算數運算子,將其它字串加入到原字串尾端。

+    將兩字串相加,並傳回一個相加字串的拷貝。

assign    將原字串覆蓋掉,原字串清除。並可以指定字串的位置和大小例:s.assign(char*,pos,size);

append    將其它字串加入到原字串尾端。並可以指定字串的位置和大小。例:s.append(char*,pos,size);

swap    將兩個 string 字串交換,只能兩個 string 交換而已。

Top

字元存取
at    它和下列那一個功能幾乎一樣,除了它可以丟出一個例外(out_of_range),當指定指大於或等於 size 時。

[ ]    重載了[ ] 運算子,使它具有存取字串內某一個字元的功能。例:s4[2]

c_str    傳回一個指標指向字串的位置。

data    傳回一個指標指向 string 物件內的緩區。

Top

字串疊代子
begin    傳回一個指向起點的疊代子。例: string::iterator itr = aString.begin();

end    傳回一個指向終點的疊代子。

rbegin    傳回一個指向反轉起點的疊代子。

rend    傳回一個指向反轉終點的疊代子。

Top

插入、刪除和替代
insert    將字串插入原字串,例:s.insert("abc",3);    //將 abc 插入位置 3 的地方。
             當然疊代子也可以當參數,例:s.insert( 2,s1.begin(),s1.end() ) ;   
               //將 s1 插入位置 2 的地方

erase    刪除字串,例: s.erase(2,4);    //刪除 第2 位置開始的 4 個字元。
            當然疊代子也可以當參數,例:s.erase(s1.begin()+4,s1.end()+6 ) ;   
             //刪除第 4 ~ 6 位置的字串

replace    替換字串,例:s.replace(4, 2, "pqr"); //將 4 ~ 5 的位置替換成"pqr"。

Top

拷貝和子字串
copy    將字串拷貝,例:s.copy (s4, 2);    //將 2 ~ end 的字串拷貝到 s4。
           例:s.copy (s4, 2, 3);     //將 2 ~ 4 的字串拷貝到 s4。

substr    傳回一個 string 物件,內容為指定的圍。例 s.substr ( 1);    // 1~ end
              s.substr ( 1, 3);     // 1~3  

Top

字串比較
<, <=, ==, !=, >=, 和 >    逐字元的方式比較兩個引數字串。

Top

搜尋操作
find    搜尋字串的位置,例:s.find("ss", 5);    
           // 從 5 之後開始搜尋,5可有可無,傳回一個整數指向搜尋到的字元開始。

rfind    從字串最後面搜尋字串,例:s.rfind("ss", 5);    
           // 從字串倒數第 5 個之後開始搜尋,5可有可無,傳回一個整數指向搜尋到的字元開始。

find_first_of    搜尋字串的位置,不指定位置。

find_last_of    從最後面搜尋字串的位置,不指定位置。

find_first_not_of    搜尋不是此字串的位置,不指定位置。

find_last_not_of    從最後面搜尋不是此字串的位置,不指定位置。

(http://www.fanqiang.com)
    進入【UNIX論壇

相關文章
標準C程式庫--問題例--類型 String (2001-06-01 16:10:00)
標準C程式庫--標準樣版庫-集合樣版 (2001-06-01 15:00:01)
標準C程式庫--標準樣版庫-雙頭佇列樣版 (2001-06-01 14:08:00)
標準C程式庫--標準樣版庫-串列樣版 (2001-06-01 13:04:00)
標準C程式庫--標準樣版庫-向量樣版 (2001-06-01 12:10:01)
標準C程式庫--標準樣版庫-字串樣版 (2001-06-01 11:00:00)
 

★  樊強制作 歡迎分享  ★