天天看點

9、C++ Primer 4th 筆記,string類型

1、string操作<?xml:namespace prefix = o />

string s;

定義一個新的空 string 對象,命名為 s

string s(cp);

定義一個新的 string 對象,用 cp 所指向的(以空字元null 結束的)C 風格字元串(可以為字元串或字元數組,但是需以null結束)初始化該對象。但是,這個數組的所有字元,除null外,都被複制到新建立的string對象中。

string s(s2);

定義一個新的 string 對象,并将它初始化為 s2 的副本

is >> s;

從輸入流 is 中讀取一個以空白字元分隔的字元串,寫入 s

os << s;

将 s 寫到輸出流 os 中getline(is, s) 從輸入流 is 中讀取一行字元,寫入 s

s1 + s2

把 s1 和 s2 串接起來,産生一個新的 string 對象

s1 += s2

将 s2 拼接在 s1 後面

關系操作符

相等運算(== 和 !=)以及關系運算(<、<=、> 和 >=)都可用于 string 對象的比較,等效于(區分大小寫的)字典次序的比較

在某些方面,可将 string 類型視為字元容器。除了一些特殊操作,string 類型提供與 vector 容器相同的操作。string 類型與 vector 容器不同的是,它不支援以棧方式操縱容器:在 string 類型中不能使用 front、back 和 pop_back 操作。

與vector容器的元素一樣,string的字元串也是連續存儲的。string不支援帶有單個容器長度作為參數的構造函數。

其它構造string的方法

string s(cp, n)

建立一個 string 對象,它被初始化為 cp 所指向數組的前 n 個元素的副本

string s(s2, pos2)

建立一個 string 對象,它被初始化為一個已存在的 string 對象 s2 中從下标 pos2 開始的字元的副本

string s(s2, pos2, len2)

建立一個 string 對象,它被初始化為 s2 中從下标 pos2 開始的 len2 個字元的副本。如果 pos2 > s2.size(),則該操作未定義,無論 len2 的值是多少,最多隻能複制 s2.size() - pos2 個字元

注意:n、len2 和 pos2 都是 unsigned 值

2、修改string對象的其他方法

與容器共有的string的操作

s.insert(p, t)

在疊代器 p 指向的元素之前插入一個值為 t 的新元素。傳回指向新插入元素的疊代器

s.insert(p, n, t)

在疊代器 p 指向的元素之前插入 n 個值為 t 的新元素。傳回 void

s.insert(p, b, e)

在疊代器 p 指向的元素之前插入疊代器 b 和 e 标記範圍内所有的元素。傳回 void

s.assign(b, e)

在疊代器 b 和 e 标記範圍内的元素替換 s。對于 string 類型,該操作傳回 s;對于容器類型,則傳回 void

s.assign(n, t)

用值為 t 的 n 個副本替換 s。對于 string 類型,該操作傳回 s;對于容器類型,則傳回 void

s.erase(p)

删除疊代器 p 指向的元素。傳回一個疊代器,指向被删除元素後面的元素

s.erase(b, e)

删除疊代器 b 和 e 标記範圍内所有的元素。傳回一個疊代器,指向被删除元素段後面的第一個元素

string類型特有的版本

s.insert(pos,n,c)

在下标為 pos 的元素之前插入 n 個字元 c

s.insert(pos,s2)

在下标為 pos 的元素之前插入 string 對象 s2 的副本

s.insert(pos,s2,pos2,len)

在下标為 pos 的元素之前插入 s2 中從下标 pos2 開始的 len 個字元

s.insert(pos,cp,len)

在下标為 pos 打元素之前插入 cp 所指向數組的前 len 個字元

s.insert(pos, cp)

在下标為 pos 的元素之前插入 cp 所指向的以空字元結束的字元串副本

s.assign(s2)

用 s2 的副本替換 s

s.assign(s2, pos2, len)

用 s2 中從下标 pos2 開始的 len 個字元副本替換 s

s.assign(cp, len)

用 cp 所指向數組的前 len 個字元副本替換 s

s.assign(cp)

用 cp 所指向的以空字元結束的字元串副本替換 s

s.erase(pos, len)

删除從下标 pos 開始的 len 個字元

除非特殊聲明,上述所有操作都傳回 s 的引用

3、隻适用于string類型的操作

表示 求子串

s.substr(pos, n)

傳回一個string類型的字元串,它包含s中從下标 pos開始的 n 個字元

s.substr(pos)

傳回一個 string 類型的字元串,它包含從下标 pos 開始到s 末尾的所有字元

s.substr()

傳回 s 的副本

表示 添加和替換

修改string對象的操作,args在下表中示

s.append( args)

将 args 串接在 s 後面。傳回 s 引用

s.replace(pos,len,args)

删除 s 中從下标 pos 開始的 len 個字元,用 args指定的字元替換之。傳回s的引用。在這個版本中,args不能為 b2,e2

s.replace(b,e,args)

删除疊代器 b 和 e 标記範圍内所有的字元,用 args替換之。傳回 s 的引用。在這個版本中,args 不能為 s2,pos2,len2

append,replace操作的參數:args

s2

string 類型的字元串 s2

s2, pos2, len2

字元串 s2 中從下标 pos2 開始的 len2 個字元

cp

指針 cp 指向的以空字元結束的數組

cp, len2

cp 指向的以空字元結束的數組中前 len2 個字元

n, c

字元 c 的 n 個副本

b2, e2

疊代器 b2 和 e2 标記的範圍内所有字元

表示 查找

傳回 string::size_type 類型的值,以下标形式标記查找比對所發生的位置;或者傳回一個名為 string::npos 的特殊值,說明查找沒有比對。string 類将 npos 定義為保證大于任何有效下标的值。

s.find( args)

在 s 中查找 args 的第一次出現

s.rfind( args)

在 s 中查找 args 的最後一次出現

s.find_first_of( args)

在 s 中查找 args 的任意字元的第一次出現

s.find_last_of( args)

在 s 中查找 args 的任意字元的最後一次出現

s.find_first_not_of( args)

在 s 中查找第一個不屬于 args 的字元

s.find_last_not_of( args)

在 s 中查找最後一個不屬于 args 的字元

find操作的參數,args

c, pos

在 s 中,從下标 pos 标記的位置開始,查找字元 c。pos 的預設值為 0

s2, pos

在s中,從下标pos标記的位置開始,查找string對象s2。pos 的預設值為 0

cp, pos

在 s 中,從下标 pos 标記的位置形參,查找指針 cp 所指向的 C 風格的以空字元結束的字元串。pos 的預設值為 0

cp, pos, n

在 s 中,從下标 pos 标記的位置開始,查找指針 cp 所指向數組的前 n 個字元。pos 和 n 都沒有預設值

表示 比較

除了關系操作符,string類型還提供了一組compare操作,用于實作字典順序的比較,操作結果類似于C語言中的庫函數strcmp。

s.compare(s2)

比較 s 和 s2

s.compare(pos1, n1, s2)

讓s中從pos下标位置開始的n1個字元與s2做比較

s.compare(pos1, n1, s2, pos2, n2)

讓 s 中從 pos1 下标位置開始的 n1 個字元與 s2 中從 pos2下标位置開始的 n2 個字元做比較

s.compare(cp)

比較 s 和 cp 所指向的以空字元結束的字元串

s.compare(pos1, n1, cp)

讓 s 中從 pos1 下标位置開始的 n1 個字元與 cp 所指向的字元串做比較

s.compare(pos1, n1, cp, n2)

讓 s 中從 pos1 下标位置開始的 n1 個字元與 cp 所指向的字元串的前 n2 個字元做比較

參考

繼續閱讀