C++——String类超详细介绍
(歡迎及時指正錯誤!謝謝)
STL的含義:標準模板庫
STL的內(nèi)容:
- 容器:數(shù)據(jù)的倉庫
- 算法:與數(shù)據(jù)結(jié)構(gòu)相關(guān)的算法、通用的算法(和數(shù)據(jù)結(jié)構(gòu)無關(guān))
注:熟悉常用的算法 sort? reverse
- 迭代器:算法和容器的連接
- 適配器:類似于轉(zhuǎn)接線,蘋果線要連接安卓線
容器:
序列式容器(線性結(jié)構(gòu))
string:
array:C11靜態(tài)順序表
vector:動態(tài)順序表
list:帶頭節(jié)點的雙向循環(huán)鏈表
deque:動態(tài)二維數(shù)組
forward_list:帶頭結(jié)點的循環(huán)單鏈表
stack:棧
queue:隊列
String類:按照類的方式進行動態(tài)管理字符串
底層:是一種順序表的結(jié)構(gòu),元素是char類型的字符
string類的常用構(gòu)造函數(shù):
- string? str——構(gòu)造空的string類對象,即空字符串
- string str(str1)——str1 和 str 一樣
- string? str("ABC")——等價于 str="ABC"
- string? str("ABC",strlen)——等價于 "ABC" 存入 str 中,最多存儲 strlen 個字節(jié)
- string? str("ABC",stridx,strlen)——等價于 "ABC" 的stridx 位置,作為字符串開頭,存到str中,最多存儲 strlen 個字節(jié)
- string? str(srelen,'A')——存儲 strlen 個 'A' 到 str 中
//用法小實例
#include<iostream>
using namespace std;int main() {string s1; //空字符串string s2(10,'$'); //十個 $string s3("hello world"); //hello wordcout << s3.size << endl;cout << s3.length << endl; //都是求字符串長度 11cout << s3.capacity << endl; //求s3的容量s3.clear(); //清空string s4(s3); //s4 和 s3一樣
}
注:使用string類時,必須包含頭文件以及using namespace std。
string常用成員函數(shù):
assign函數(shù):
- str.assign("ABC")——清空字符串,并設(shè)置為 "ABC"
- str.assign("ABC",2)——清空字符串,并設(shè)置為"AB",保留兩個字符
- str.assign("ABC",1,1)——清空字符串,設(shè)置為 "ABC" 中的從 位置1 開始,保留 1個 字符
- str.assign(5,'A')——清空字符串,然后字符串設(shè)置為 5個 'A'
- str.length()——求字符串長度
- str.size()——和 length() 一樣
- str.capacity()——獲取容量,包含了不用增加內(nèi)存就能使用的字符數(shù)
- str.reasize(10)——設(shè)置當前 str 的大小為10,若大小大與當前串的長度,\0 來填充
- str.reasize(10,char c)——設(shè)置當前 str 的大小為10,若大小大與當前串的長度,字0符c 來填充
- str.reserve(10)——設(shè)置str的容量 10,不會填充數(shù)據(jù)
- str.swap(str1)——交換 str1 和 str 的字符串
- str.push_back('A')——在str末尾添加一個字符? 'A' ,參數(shù)必須是字符形式
- str.append("ABC")——在str末尾添加一個字符串 "ABC",參數(shù)必須是字符串形式
insert函數(shù)方法:?
- str.insert(2,3,'A')——在str下標為2的位置添加 3個 字符'A'
- str.insert(2,"ABC")——在str下標為2的位置添加 字符串 "ABC"
- str.insert(2,"ABC",1)——在str下標為2的位置添加 字符串 "ABC" 中 1個 字符
- str.insert(2,"ABC",1,1)——在str下標為2的位置添加 字符串 "ABC" 中從位置 1 開始的 1 個字符
注:上個函數(shù)參數(shù)中加粗的 1 ,可以是?string::npos,這時候最大值,從 位置1 開始后面的全部字符
- str.insert( iterator pos, size_type count, CharT ch )——在 str 中,迭代器指向的 pos位置 插入 count個 字符 ch
s4.insert(++str1.begin(),2,'a'); ? ? ?? 結(jié)果:s4:ABCD ?? -> ?? AaaBCD
- str.insert( iterator pos, InputIt first, InputIt last )——在 str 中,pos位置 插入 str1 的 開始位置 到 結(jié)束為止
s4.insert(s4.begin(),str1.begin(),str1.end()); ? ? ? ?結(jié)果:s4:ABCD? str1:abc ? -> ?? abcABCD
- str.erase(2)——刪除 下標2 的位置開始,之后的全刪除
- str.erase(2,1)——刪除 下標2 的位置開始,之后的 1個 刪除
- str.clear()——刪除 str 所有
- str.replace(2,4,"abcd")——從 下標2 的位置,替換 4個字節(jié) ,為"abcd"
- str.empty()——判空
反轉(zhuǎn)相關(guān):
(位于頭文件<algorithm>)
- reverse(str.begin(),str.end())——str的開始 到 結(jié)束字符反轉(zhuǎn)?
reverse(s4.begin,s4.end); ? ? ?? 結(jié)果:s4:ABCD ? -> ?? DCBA
查找相關(guān):
查找成功返回位置 ,查找失敗,返回-1
find函數(shù):從頭查找
- str.find('A')——查找 'A'
- str.find("ABC")——查找 "ABC"
int n=s4.find("ABC"); ? s4:ABCD ?? -> ? n = 0
- str.find('B',1)——從 位置1 處,查找'B'
- str.find("ABC",1,2)——從 位置1 處,開始查找 'ABC' 的前 2個 字符
rfind函數(shù):從尾部查找
- str.rfind('A')——查找 'A'
- str.rfind("ABC")——查找 "ABC"
int n=s4.rfind("ABC"); ? s4:AAAABCD ?? -> ? n = 3
- str.rfind('B',1)——從 位置1 處,向前查找'B'
- str.rfind("ABC",1,2)——從 位置1 處,開始向前查找 'ABC' 的前 2個 字符
find_first_of()函數(shù):
查找是否包含有子串中任何一個字符
- str.find_first_of("abBc")——查找 "abBc" 和str 相等的任何字符,"abBc" 中有就返回位置
- str.find_first_of("abBc",1)——查找 "abBc" 和str 相等的任何字符,從 位置1 處,開始查找"abBc" 中的字符,"abBc" 中有的就返回位置
- str.find_first_of("abBc",1,2)——查找 "abBc" 和str 相等的任何字符,從 位置1 處,開始查找"abBc" 的前 2個 字符,"abBc" 中有的就返回位置
find_last_of()函數(shù):
find_first_not_of ()末尾查找, 從末尾處開始,向前查找是否包含有子串中任何一個字符
- str.find_last_of("abBc")——查找 "abBc" 和str 相等的任何字符,向前查找,"abBc" 中有的返回位置
- str.find_last_of("abBc",1)——查找 "abBc" 和str 相等的任何字符,從 位置1 處,開始向前查找"abBc" 中的字符,"abBc" 中有的就返回位置
- str.find_last_of("abBc",10,2)——查找 "abBc" 和str 相等的任何字符,從 位置10 處,開始向前查找"abBc" 的前 2個 字符,"abBc" 中有的就返回位置
拷貝相關(guān)的:
- str1=str.substr(2)——提取子串,提取出 str 的 下標為2 到末尾,給 str1
- str1=str.substr(2,3)——提取子串,提取出 str 的 下標為2 開始,提取三個字節(jié),給 str1
- const char* s1=str.data()——將string類轉(zhuǎn)為字符串數(shù)組,返回給s1
char* s=new char[10]
- str.copy(s,count,pos)——將 str 里的 pos 位置開始,拷貝 count個 字符,存到 s 里
比較相關(guān)的函數(shù):(改部分已經(jīng)在VS2013中驗證,錯誤已更正,如還有,請指出)
compare函數(shù):(str原串)與(str新串)ASCII值相等返回0;(str原串)小于(str新串)返回-1;(str原串)大于(str新串)返回1。
示例對象:string str(“abcd”)
- str.compare(“abcd”)——返回0。
- str.compare(“abce”)——返回-1。
- str.compare(“abcc”)——返回1。
- str.compare(0,2,str,2,2)——用str的 下標0 開始的 2個字符 和 str的 下標2 開始的 2個 字符比較——就是用 "ab" 和 "cd”" 比較,結(jié)果返回-1。
- str.compare(1,2,”bcx”,2)——用str的 下標1 開始的 2個字符 和 "bcx"的 前 2個 字符比較——就是用 "bc" 和 "bc”" 比較,返回0。
附string常用函數(shù)表:
| 函數(shù)名 | 描述 |
| begin | 得到指向字符串開頭的Iterator |
| end | 得到指向字符串結(jié)尾的Iterator |
| rbegin | 得到指向反向字符串開頭的Iterator |
| rend | 得到指向反向字符串結(jié)尾的Iterator |
| size | 得到字符串的大小 |
| length | 和size函數(shù)功能相同 |
| max_size | 字符串可能的最大大小 |
| capacity | 在不重新分配內(nèi)存的情況下,字符串可能的大小 |
| empty | 判斷是否為空 |
| operator[] | 取第幾個元素,相當于數(shù)組 |
| c_str | 取得C風(fēng)格的const char* 字符串 |
| data | 取得字符串內(nèi)容地址 |
| operator= | 賦值操作符 |
| reserve | 預(yù)留空間 |
| swap | 交換函數(shù) |
| insert | 插入字符 |
| append | 追加字符 |
| push_back | 追加字符 |
| operator+= | += 操作符 |
| erase | 刪除字符串 |
| clear | 清空字符容器中所有內(nèi)容 |
| resize | 重新分配空間 |
| assign | 和賦值操作符一樣 |
| replace | 替代 |
| copy | 字符串到空間 |
| find | 查找 |
| rfind | 反向查找 |
| find_first_of | 查找包含子串中的任何字符,返回第一個位置 |
| find_first_not_of | 查找不包含子串中的任何字符,返回第一個位置 |
| find_last_of | 查找包含子串中的任何字符,返回最后一個位置 |
| find_last_not_of | 查找不包含子串中的任何字符,返回最后一個位置 |
| substr | 得到字串 |
| compare | 比較字符串 |
| operator+ | 字符串鏈接 |
| operator== | 判斷是否相等 |
| operator!= | 判斷是否不等于 |
| operator<</td> | 判斷是否小于 |
| operator>> | 從輸入流中讀入字符串 |
| operator<< | 字符串寫入輸出流 |
| getline | 從輸入流中讀入一行 |
總結(jié)
以上是生活随笔為你收集整理的C++——String类超详细介绍的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: time.h中的相关计时函数time,l
- 下一篇: VS 打开No EditorOption