C++中的字符串string,你真的弄懂了嗎?

一、string類簡介

string類是C++中用來操作字符串序列的、可以自身管理內存的容器,自身攜帶的構造函數和析構函數,可以讓我們直接使用而不必關心內存的分配細節,可以說是C++中最讓人放心的一個類了。

它支持元素的存取訪問、字符串比較、字符串內容的修改和替換、字符串連接、字符串的查找和搜索、字符串的IO操作、可以方便的獲取器大小和容量等等。因此,無論學習何種語言,字符串必是每一個程序員的最愛!

二、string類的使用

1、string類的初始化方法

string strEmpty; // 空字符串
string str1 = "ISMILELI";
string str2(str1); // str1內容複製給str2
string str3(str1,2,5);// 從str1的第2個元素開始複製5個數據給str2
string str4(str1,5,'S'); // 賦值給str4五個S
string str5(str1.begin(),str1.end()); // 迭代器的方式賦值
string str6(str1,6); // 把str1的前六個賦值給str5
cout << "str1:" << str1<<endl;

2、string類的大小

size()和length()是比較常用的獲得字符串中字符個數的方法,兩個效果相同。
max_size()是返回string最大能包含的字符串數,當超過時編譯器會拋出length_error的異常。
capacity()是重新分配內存之前string中能包含的最大字符個數。

3、string類的元素訪問

string類支持下標操作[]和函數at()訪問,兩者的不同之處是下標操作不檢查索引的有效性,超出下標時會引起不可測的麻煩;使用at()函數會檢查下標的有效性,超出下標時會拋出異常out_of_range。注意這兩個操作返回的都是“引用”,當字符串被重新分配內存後可能會引起錯誤。第一個下標爲0,最後一個爲length()-1。

4、string比較操作

1》使用常用的運算符比較:>,<,==,>=,<=,!=。
2》使用compare()函數,能夠區分字母的大小寫比較,相同返回0,按順序先大於返回正數,否則爲負數。

string str7("abcdefg");
string str8("ABCdefg");
string str9("123456");
string str10("def1234");
string str11("abcdefg");
int num1 = str7.compare(str11); // 完整的比較 num1=0
int num2 = str7.compare(1,4,str8); //bcde和str8比較num2=1
int num3 = str8.compare(2,5,str7,2,5); //Cde和cde比較 num3=-1
int num4 =  str9.compare(0,4,str10,3,6); // 1234和1234比較 num4=0

5、字符串的修改

字符串提供了很多修改的方法可供程序員調用,例如直接賦值操作=、賦值n函數assign、刪除函數erase、插入函數insert、交換函數swap、添加函數append等等,每種函數又提供了很多的重載方法,使用非常方便靈活。

string strChange;
strChange.assign(str11); // 直接賦值給另一個字符串,str11在標題4中定義
string strSub;
strSub(str11,0,3);  // 從位置0開始賦值3個字符
strChange.erase(strChange.begin(),strChange.end()); // 移除
strChange.swap(strSub); // 交換內容
strSub.insert(1,"A"); // 在strSub位置1插入一個A
strSub.insert(2,"BBBBB",3); // 從strSub位置2插入“BBBBB”的前三個字符
strSub.append("DDD"); // 追加字符串
strChange.append(strSub.begin(),strSub.end()); // 把strSub中的字符串全部追加到strChnage中

6、字符串的替換

字符串的替換函數是replace,別看只有一個函數,它卻重載了10中方法,沒有你想不到的,只有你用不到的!

string strSrc("abcdefgh");
string strDst(1234567);
strSrc.replace(1,3,strDst); // 從strSrc的1處開始使用strDst中的前3字符替換
strSrc.replace(1,3,strDst,1,3); // 從strSrc的1處開始,使用strDst中的[1,3]的子串開始替換
strSrc.replace(1,4,4,'X'); // 使用4個字符X替換strSrc中從[1,4]的字符
strSrc.replace(strSrc.begin(),strSrc.end(),strDst); // 使用迭代器替換

7、字符串的連接

直接使用+運算符即可。

string strConnect = str10+str11;

8、字符串的查找

字符串提供了很多查找的函數,每種函數也都提供了衆多的重載方法,例如:從前查找函數find,從後查找函數rfind、條件查找find_first_of和find_last_of、條件查找find_first_not_of和find_last_not_of等。

string strFind = “ISMILE”
string str = "hello,I'm ISMILELI,Thank you for paying attention to me! "
str.find(strFind,0); // 正向查找
str.find(strFind,3); // 從下標位置3開始正向查找
str.rfind(strFind,0); // 反向查找
str.find(strFind,3); // 從下標位置3開始反向查找
str.find_first_of(strFind); // 查找第一個是strFind的子串
str.find_first_of(‘I’); // 查找第一個是I的字符
str.find_first_not_of(strFind); // 查找第一個不是strFind的子串
str.find_first_not_of(‘I’); // 查找第一個不是I的字符
str.find_last_of(strFind); // 查找最後一個是strFind的子串
str.find_last_of(‘I’); // 查找最後一個是I的字符
str.find_last_not_of(strFind); // 查找最後一個不是strFind的子串
str.find_last_not_of(‘I’); // 查找最後一個不是I的字符

不再單獨建立工程示例,文中已經提供了示範代碼。

能力有限,如有錯誤,多多指教!覺得有用,點贊鼓勵一下吧!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章