typedef basic_string<char> string;c++
1.string str("xxx");//在棧中隱士實例化string對象數組
2.string str = "xxx";app
3.string str = string("xxx");//顯示構造ide
4.string* str = new string("xxx");//在堆內存實例化對象函數
delete str;spa
5.string str;//空串不會顯示任何內容指針
string str(""/*注意不能接受NULL指針*/);//同上對象
string str(pStr ? "" : pStr);內存
6.從c --> c++字符串
char cStr[] = "xxx";
string str(cStr);
7.從c++ --> c
const char* str2 = str.c_str();//將字符串的首地址變爲const類型字符串的指針
8.string的操做符重載:
str+str、str+=str、str=str三、str>str三、str==str3......
= + += > >= < <= == !=
9.string函數:注意下標都從0開始
(1)str.size()//字符串的緩衝區大小,不包含\0
(2)str.length()//獲取元素個數,不包含\0
(3)str.resize(5);//將字符串緩衝區大小設置爲5,若是多了則截斷,若是少了所有補'\0'.
(4)str+="xxxxxx";//若是str自己後面有'\0'那麼,所加字符串添加到後面,輸出str的結果到'\0'截止,即後面加的字符串不會輸出。
可是緩衝區的大小加了所加字符串的長度
(5)str.compare(str2);//比較字符串的大小
1:str > str2
0:str = str2
-1:str < str2
(6)str.append(str2);//將str2拼接到str後面
str.append(str2, n, m);//從str2字符串的第n個(下標從0開始)開始的m個字符拼接到str後面
如:string str1("hello");string str2("the world !");str1.append(str2, 4, 5);結果:helloworld
(7)str.at(index) == str[index]
相同的是下標都從0開始
不一樣的是 [] 沒有檢查數組越界(取出來未知值),而at檢查是否越界訪問,並拋出out_of_range& ex異常
(8)str.find(str2);//在str中查找str2,若是找到就返回str2在str1中開始位置的下標(下標類型爲:string::size_type)
若是下標值等於:string::npos(全局變量),那麼表示到了str1結尾
(9)str.insert(pos, str2);//在下標爲pos的位置插入str2
另一個版本:str.insert(pos, str2, n, m);//在下標爲pos的位置插入m個字符, 從str2的第n個字符開始(開始下標爲0)
(10)str.erase(pos, n);//從下標爲pos的地方開始刪除n個字符
(11)pos = str.find_first_of(str2, pos);//在str中找到第一個字符,這個字符能和str2中任何一個字符匹配,並返回這個字符在str1中的下標
不然返回npos(文件結尾)
(12)相似拷貝構造函數和獲取子串
string str2(str1, pos, n);//在str1中從pos下標處開始的n個字符截取做爲參數構造str2
str2 = str1.substr(pos, n);//在str1中從pos下標開始截取n個字符賦值給str2
(13)str1.replace(pos, size, str2);//將str1的pos下標處開始size個字符替換爲str2,str1的長度可能隨str2的長度變化
string str1 ("123456789abcdefghtr");
str1.replace (9, 2, "hello");
123456789hellocdefghtr