string

? ? ? ?string提供字符串的功能,使用時需要引入頭文件<string>,string和vector類似芋忿,vector是對數(shù)組的封裝呻疹,而string是對字符串的封裝击狮。從面向?qū)ο蠼嵌葋碇v,C風(fēng)格字符串是難以操控的栗精。所以STL里提供了面向?qū)ο蟮膕tring封裝闯参。

? ? ? ? string內(nèi)部仍然是維護一個char型數(shù)組,并且也是以0結(jié)尾的悲立。對外提供了字符串操作常用的函數(shù)鹿寨,如append、clear薪夕、at脚草、length等操作,并支持復(fù)制原献、賦值等操作馏慨,重載了必要的操作符,使用戶可以以一個對象的視角姑隅;來操作字符串写隶。下面列舉幾個string主要函數(shù):

append-----附加字符串;

clear-----清空讲仰;

capacity-----容量慕趴;

size-----實際長度;

length-----實際長度叮盘,等同于size函數(shù)秩贰;

at-----按索引訪問字符;

find-----查找一個字符或子串柔吼;

rfind-----從后往前查找一個字符或子串毒费;

find_first_of-----查找匹配若干字符串中的一個字符;

find_first_not_of-----查找不匹配若干字符串的一個字符愈魏;

find_last_of-----從后往前查找觅玻,匹配若干字符串中的一個字符想际;

find_last_not_of-----從后往前查找,不匹配若干字符中的一個字符溪厘;

substr-----取得一個子串胡本;

insert-----插入字符或子串;

replace-----替換字符或子串畸悬;

構(gòu)造string對象可以有以下幾種方式:

string str1("LiMing"); ? ? ? ? ?//以一個C風(fēng)格字符串構(gòu)造

string str2 = "WangHua"; ? ? ? ? ?//以一個C風(fēng)格字符串構(gòu)造

string str3 ("abcde",5); ? ? ? ? ?//參數(shù)1是C字符串侧甫,參數(shù)2是長度

string str4; ? ? ? ? //空字符串

string str5 = " "; ? ? ? ? ?//空字符串


注意:一定不要用NULL來初始化string蹋宦,否則會讓程序崩潰披粟。

1)append/clear

append用于在末尾附加若干字符或字符串,例如:

#include<stdio.h>

#include<string>

using namespace std;

int main()

{

string str;

str.apend("something else"); ? ? ?//附加一個字符串

str.apend("abcde",5); ? ? ? ? ?//附加一個字符串:賦值前5個字符

str.apend("abcde",1,3); ? ? ? ? //附加一個字符串冷冗,七點offset=1守屉,長度3,即復(fù)制bcd

str.apend(2,'h'); ? ? ? ? ?//附加兩個h字符

return 0;

}


? ? ? ? 和vector一樣當(dāng)附加字符是蒿辙,內(nèi)部緩沖區(qū)size = capacity時會自動擴充緩沖區(qū):先申請一塊更大的內(nèi)存拇泛,再把原有數(shù)據(jù)復(fù)制過去。

2)size/capacity/resize/clear/length

? ? ? ? string的內(nèi)部存儲原理和vector相同思灌。size用于得到已經(jīng)存儲的字符串長度俺叭,capacity表示剩余可用長度。length和size完全相同习瑰。

? ? ? ? resize用于顯式地設(shè)置string內(nèi)部緩沖區(qū)的容量capacity绪颖,clear用于清空緩存區(qū)內(nèi)的所有字符,如果希望避免append低效問題甜奄,可以事先申請一個大緩沖區(qū)。

3)at

? ? ? ? ?at用于按索引訪問字符窃款,at函數(shù)返回的是第一個reference课兄,因為可以用at修改字符串的內(nèi)容。例如:

? ? ? ? ?str.at(0) = 'K';

? ? ? ? ?char ch = str.at(0);

? ? ? ? ? string頁重載了操作符[],作用與at等同晨继,例如:str[0] = 'K';

4)字符串比較

? ? ? ? ? C風(fēng)格字符串使用strcmp函數(shù)進行大小比較烟阐,而string重載了所有關(guān)系操作符,所以用起來會直觀一些紊扬。

5)字符串查找

? ? ? ? ?C風(fēng)格字符串用strstr函數(shù)進行子串查找蜒茄,并不是太方便。string提供若干查找函數(shù)餐屎,方便里查找操作檀葛。

? ? ? ? find函數(shù)用于查找一個字符或子串,從左到右依次查找腹缩,知道第一次匹配時屿聋,返回匹配的位置空扎,如果沒有查找到任何匹配,則返回-1,润讥。這里說的位置或偏移转锈,是從0開始的,和數(shù)組下標(biāo)法相同楚殿。例如:

? ? ? ? string str = "LiMing is doing homework";

? ? ? ? 查找i的位置撮慨;

? ? ? ? ?int pos = str.find('i');

? ? ? ? ?源字符串str包括若干個i,第一個i出現(xiàn)的位置是1脆粥,所以上面的代碼返回就是1.如果要接著往后查找甫煞,可以為find指定第二個參數(shù),該參數(shù)表示起點位置偏移offset冠绢,例如;

? ? ? ? int pos = str.find('i',2);

? ? ? ? 第二個參數(shù)為2抚吠,表明從位置2開始查找,在查找到str[3]時fai按匹配弟胀,所以可以返回3.

? ? ? ? find可以直接查找一個子串楷力,例如:

? ? ? ? int pos = str.find("ing");

? ? ? ? 從左到右查找"ing",第一次匹配時返回子串首字符的位置以下代碼是在第一次查找的基礎(chǔ)上繼續(xù)往后查找相同字符串:

? ? ? ? int pos = str.find("ing",pos+3);

? ? ? ?rfind用于從右往左來查找字符或子串孵户,沒有匹配返回-1萧朝,有匹配則返回子串的首字符的位置。

? ? ? ?int pos = str.rfind("ing");

? ? ? ?pos = str.rfind("ing",pos-3);

6)substr

? ? ? ?substr用于復(fù)制部分字串夏哭,帶兩個參數(shù):第一個參數(shù)offset表示起始位置检柬,第二個參數(shù)len表示要截取的子串長度。第二個參數(shù)如果省略則表示一直截取到末尾竖配。

? ? ? str src("abcdefg");

? ? ? string str1 = src.substr(4); ? ? //返回efg

? ? ? string str2 = src.substr(4,2); ? ? //返回ef

7)insert/replace

? ? ? ?insert函數(shù)用于向字符串中間插入字符或子串何址。

string& ?insert(int pos,const char* str); ? ?//在pos出插入str

? ? ? replace用于替換string中間的一個資產(chǎn)src,替換另一個子串dest进胯。

? ? ? 如果要實現(xiàn)刪除子串用爪,也可以借助DoReplace函數(shù)來實現(xiàn),只是將目標(biāo)字串長度設(shè)為0罷了胁镐。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末偎血,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子盯漂,更是在濱河造成了極大的恐慌颇玷,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,324評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件就缆,死亡現(xiàn)場離奇詭異帖渠,居然都是意外死亡,警方通過查閱死者的電腦和手機违崇,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,356評論 3 392
  • 文/潘曉璐 我一進店門阿弃,熙熙樓的掌柜王于貴愁眉苦臉地迎上來诊霹,“玉大人,你說我怎么就攤上這事渣淳∑⒒梗” “怎么了?”我有些...
    開封第一講書人閱讀 162,328評論 0 353
  • 文/不壞的土叔 我叫張陵入愧,是天一觀的道長鄙漏。 經(jīng)常有香客問我,道長棺蛛,這世上最難降的妖魔是什么怔蚌? 我笑而不...
    開封第一講書人閱讀 58,147評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮旁赊,結(jié)果婚禮上桦踊,老公的妹妹穿的比我還像新娘。我一直安慰自己终畅,他們只是感情好籍胯,可當(dāng)我...
    茶點故事閱讀 67,160評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著离福,像睡著了一般杖狼。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上妖爷,一...
    開封第一講書人閱讀 51,115評論 1 296
  • 那天蝶涩,我揣著相機與錄音,去河邊找鬼絮识。 笑死绿聘,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的笋除。 我是一名探鬼主播斜友,決...
    沈念sama閱讀 40,025評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼垃它!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起烹看,我...
    開封第一講書人閱讀 38,867評論 0 274
  • 序言:老撾萬榮一對情侶失蹤国拇,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后惯殊,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體酱吝,經(jīng)...
    沈念sama閱讀 45,307評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,528評論 2 332
  • 正文 我和宋清朗相戀三年土思,在試婚紗的時候發(fā)現(xiàn)自己被綠了务热。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片忆嗜。...
    茶點故事閱讀 39,688評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖崎岂,靈堂內(nèi)的尸體忽然破棺而出捆毫,到底是詐尸還是另有隱情,我是刑警寧澤冲甘,帶...
    沈念sama閱讀 35,409評論 5 343
  • 正文 年R本政府宣布绩卤,位于F島的核電站,受9級特大地震影響江醇,放射性物質(zhì)發(fā)生泄漏濒憋。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,001評論 3 325
  • 文/蒙蒙 一陶夜、第九天 我趴在偏房一處隱蔽的房頂上張望凛驮。 院中可真熱鬧,春花似錦条辟、人聲如沸黔夭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,657評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽纠修。三九已至,卻和暖如春厂僧,著一層夾襖步出監(jiān)牢的瞬間扣草,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,811評論 1 268
  • 我被黑心中介騙來泰國打工颜屠, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留辰妙,地道東北人。 一個月前我還...
    沈念sama閱讀 47,685評論 2 368
  • 正文 我出身青樓甫窟,卻偏偏與公主長得像密浑,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子粗井,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,573評論 2 353

推薦閱讀更多精彩內(nèi)容

  • 【轉(zhuǎn)載】原文地址:std::string詳解作者:kieven2008 之所以拋棄char*的字符串而選用C++標(biāo)...
    VAYY閱讀 642評論 0 2
  • string類的構(gòu)造函數(shù): string(const char *s); //用c字符串s初始化string...
    Mr希靈閱讀 398評論 0 0
  • 1尔破、charCodeAt方法返回一個整數(shù),代表指定位置字符的Unicode編碼浇衬。 strObj.charCodeA...
    可樂可樂請加冰閱讀 430評論 0 0
  • 兒時 我用天真爛漫 編織絢麗的夢想 咯咯的笑聲 傳遍每一個奔跑過的村莊 稚嫩的童音和著蟬鳴 回蕩 風(fēng)吹樹葉有嘩嘩...
    紅葉詩閱讀 133評論 0 0
  • 昨天晚上懒构,三貓真是氣死我了。不知道是白天睡了太久晚上精神了耘擂,還是不知道哪根神經(jīng)厲害了胆剧,完全變成一個淘氣精。 辦公室...
    深井真君閱讀 174評論 0 0