1.頭文件包含:
一般來說使用string需要包含#include <string>頭文件,但是下面的程序沒有包含string頭文件卻能運行:
#include <iostream>

using namespace std;

int main()


{
string str("fdsfsdaf");

cout << str.c_str(); //str.c_str()可以運行
//cout << str; //str無法運行

return 0;
}

不包含string頭文件時,cout<<str無法運行;當重新包含string頭文件后,cout<<str運行成功。為什么???
初步設想:iostream頭文件間接導入了string頭文件,但是相當一部分的string操作定義在string頭文件中,例如程序中的<<操作符重載,不包含string頭文件的話無法使用。所以建議編程時還是主動導入string頭文件。
2.string類型聲明:
string s;
string s(args);
其中args具體參數如下:
str
str, len
chars
chars, len
chars, index, len
n, c
b, e
注意:對string的操作,既可以用迭代器,也可以用下標,它比容器具有更多的靈活性。以下使用b、e和p表示迭代器,pos表示下標,cp表示指向c類字符串的指針。
3.string操作:
=、assign():
對string對象賦以新值。=右邊可以是string類型、c_string類型甚至是'a'這樣的單一字符。使用assign()可以更靈活的對string進行賦值,例如:
args具體參數如下:
str
str, len
chars
chars, len
chars, index, len
n, c
b, e
swap():
交換兩個字符串的內容,例如s1.swap(s2),注意里面不可以是c_string類型。
+=、append(args)、push_back():
在尾部添加字符。+=后面可以是string、c_string甚至是'a'這樣的單一字符。其中args具體參數如下:
str
str, len
chars
chars, len
chars, index, len
n, c
b, e
s.push_back('x') //用于每次增加一個字符。
insert():
在string某個位置插入字符,插入位置在給定的索引處。例如s.insert(4, str)。注意,這種形式的insert()函數不支持傳入單個字符,要想傳入單個字符必須寫成字符串的形式。
s.insert(p, t) //在p前插入元素t
s.insert(p, n, t) //在p前插入n個t
s.insert(p, b, e) //b和e是迭代器
s.insert(pos, args)
其中args具體參數如下:
str
str, len
chars
chars, len
chars, index, len
n, c
b, e
erase():刪除字符。
s.erase(p) //刪除p指向的元素,返回指向該元素后面元素的迭代器
s.erase(b, e) //刪除b和e間的元素,返回指向該元素后面元素的迭代器
s.erase(pos, len) //刪除pos下標開始的len個字符
clear():
清空字符,例如s.clear(),效果等同于s="",但是內部機制是否一樣未知。
replace():替換字符。
s.replace(pos, args)
其中args具體參數如下:
str
str, len
chars
chars, len
chars, index, len
n, c
b, e
同理把前兩個參數換成b和e也可以。
+:
串聯字符串。
==、!=、<、<=、>、>=、compare():
比較字符串,可以在string與string、string與c_string間進行比較,例如str1 < str2,s <= "abc"。compare()函數支持多參數處理,支持用索引值和長度定位子串來進行比較,返回0表示相等,正數表示大于,負數表示小于,例如:
s.compare("abcd")
s.compare(s2)
s.compare(pos, len, s2)
s.compare(pos1, len1, s2, pos2, len2)
s.compare(pos, len, "....")
s.compare(pos1, len2, "....", pos2, len2)
size()、length():
返回字符數量,兩者等效。
empty():
判斷字符串是否為空。
max_size():
返回字符的可能最大個數,很可能和機器本身的限制或者字符串所在位置連續內存的大小有關系。
capacity():
返回重新分配前的字符容量。
reserve():
重置字符容量。
[]、at():
存取單一字符,不同點在于at()會檢查索引是否有效,即是否超出0~s.length()-1的范圍,如果超出會拋出out_of_range的異常。
>>、getline():
從stream中讀取某值,其中getline()是讀取一行,直到遇到分行符或者文件結尾符。
<<:
將某值寫入stream。
copy():
將某string寫入一個既有的c_string中,例如s.copy(chars, s.size()),得到的字符串不以"\0"結尾,需要注意這點。
c_str():
函數原型是const char* c_str() const{},例如s.c_str()將返回一個const char*類型,且以"\0"結尾。
data():
函數原型是const char* data() const{},例如s.data()返回一個const char*類型,與c_str()不同的是它返回的字符串不以"\0"結尾。
substr():
返回某個子字符串。
s.substr() //返回s的全部內容
s.substr(pos) //從pos下標開始的所有字符
s.substr(pos, len) //從索引pos開始的len個字符。
begin()、end():
提供類似STL的迭代器支持。
rbegin()、rend():
逆向迭代器。
get_allocator():返回配置器。
查找函數:
find
rfind
find_first_of
find_last_of
find_first_not_of
find_last_not_of
參數1是被搜尋的對象,參數2指出搜尋起點索引(可無),參數3指出搜尋的字符個數(可無),返回值是索引值,類型是string::size_type,如果沒有找到目標,返回string::npos。注意:string::npos的類型是string::size_type,并不是int而是unsigned int。
參數如下:
c, pos //從pos下標開始查找字符c,pos可默認為0
s2, pos //從pos開始查找string類型s2,pos可默認為0
cp, pos //從pos開始查找字符串cp,pos可默認為0
cp, pos, len //查找cp前n個字符,pos和len不可默認