STL備忘錄——string

前言

string是非常常用的類,了解它的功能和特性有助于我們對字符串處理方面的提升罚随。C++語言范式繁多下硕,所以我們需要仔細記住各種重載丁逝。所以在此寫了備忘錄,方便日后查閱:

初始化

#include <iostream>
#include <string>

int main ()
{
  std::string s0 ("Initial string");

  // constructors used in the same order as described above:
  std::string s1;
  std::string s2 (s0);
  std::string s3 (s0, 8, 3);
  std::string s4 ("A character sequence");
  std::string s5 ("Another character sequence", 12);
  std::string s6a (10, 'x');
  std::string s6b (10, 42);      // 42 is the ASCII code for '*'
  std::string s7 (s0.begin(), s0.begin()+7);

  std::cout << "s1: " << s1 << "\ns2: " << s2 << "\ns3: " << s3;
  std::cout << "\ns4: " << s4 << "\ns5: " << s5 << "\ns6a: " << s6a;
  std::cout << "\ns6b: " << s6b << "\ns7: " << s7 << '\n';
  return 0;
}

http://www.cplusplus.com/reference/string/string/string/

長度

length()

// output : 5
string s = "abcde";
cout<<s.length()<<endl;
cout<<s.size()<<endl;

begin

  std::string str ("Test string");
  for ( std::string::iterator it=str.begin(); it!=str.end(); ++it)
    std::cout << *it;
  std::cout << '\n';

除了begin之外梭姓,string還提供了cbegin霜幼、rbegin和crbegin。
其中誉尖,cbegin相較于begin的不同點在于罪既,它會返回const_iterator。
而rbegin铡恕,則是一個逆序的迭代器琢感,它指向字符串的最后一個。
最后的crbegin則是cbegin與rbegin特性的組合探熔。

end與begin類似驹针,不再贅述。

拼接

+

// 字符串拼接 +
string s = "abc";
s = s+"def";

append

// 字符串拼接 append
string s = "abc";
s = s.append("defg");

stringstream

//字符串拼接 stringstream
#include <sstream>

  string s = "abc";
  stringstream ss ;
  ss<<s<<"def";
  cout<<ss.str()<<endl;

sprintf

  // sprintf拼接
  char* s = new char[100];
  char* r = s;
  char* s1 = "abc";
  char* s2 = "def2";
  sprintf(s,"%s",s1 );
  s+=strlen(s1);
  sprintf(s,"%s",s2 );
  cout<<r<<endl;

上面提供了4種方法诀艰,從網(wǎng)上提供的性能測試來看柬甥,性能是從前往后越來越好的饮六,但是從使用方便的角度來講,是從前往后苛蒲,越來越差卤橄,根據(jù)具體情況,進行選擇臂外。

拆分

substr

string substr (size_t pos = 0, size_t len = npos) const;

pos
第一個字符的位置被復(fù)制為子串窟扑。
如果這是等于字符串的長度,該函數(shù)返回一個空字符串漏健。
如果這是大于字符串的長度嚎货,它會拋出out_of_range。
注意:第一個字符表示為值0(不是1)漾肮。
len
字符數(shù)在子包括(如果字符串是短厂抖,盡可能多的字符可以在需要使用)。
字符串::非營利值表示的所有字符克懊,直到字符串的結(jié)尾忱辅。

  // 取1-3位
  // output: bcd
  string s = "abc";
  s.append("def");
  s = s.substr(1,3);
  cout<<s<<endl;

resize


  std::string str ("I like to code in C");
  std::cout << str << '\n';

  unsigned sz = str.size();

  str.resize (sz+2,'+');
  std::cout << str << '\n';

  str.resize (14);
  std::cout << str << '\n';
/*output*/
/*
I like to code in C
I like to code in C++
I like to code
*/

查找

find

size_t find (const string& str, size_t pos = 0) const;

  string s = "abcdef";
  // 尋找"c" output:2
  int index1 = s.find("c");
  cout<<index1<<endl;
  // 從第 2 位開始,尋找"c" output:2
  int index2 = s.find("c" , 2);
  cout<<index2<<endl;
  // 從第 3 位開始谭溉,尋找"c" output :-1
  int index3 = s.find("c" , 3);
  cout<<index3<<endl;

轉(zhuǎn)換

數(shù)字轉(zhuǎn) string

string to_string (int val);
string to_string (long val);
string to_string (long long val);
string to_string (unsigned val);
string to_string (unsigned long val);
string to_string (unsigned long long val);
string to_string (float val);
string to_string (double val);
string to_string (long double val);
  // output : abcdef123
  string s = "abcdef";
  s+=to_string(123);
  cout<<s<<endl;

string to int

  // output : 9528
  stringstream ss;
  int num2;
  ss<<"9527";
  ss>>num2;
  cout<<num2+1<<endl;

字符數(shù)組轉(zhuǎn)string

// 字符串轉(zhuǎn)char*
std::string x = "hello world";
char *y = x.c_str();
const char* foo = "Whatever";

string bar = foo;
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末墙懂,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子扮念,更是在濱河造成了極大的恐慌损搬,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,496評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件柜与,死亡現(xiàn)場離奇詭異巧勤,居然都是意外死亡,警方通過查閱死者的電腦和手機弄匕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,187評論 3 385
  • 文/潘曉璐 我一進店門颅悉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人迁匠,你說我怎么就攤上這事剩瓶。” “怎么了城丧?”我有些...
    開封第一講書人閱讀 157,091評論 0 348
  • 文/不壞的土叔 我叫張陵延曙,是天一觀的道長。 經(jīng)常有香客問我亡哄,道長枝缔,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,458評論 1 283
  • 正文 為了忘掉前任蚊惯,我火速辦了婚禮魂仍,結(jié)果婚禮上拐辽,老公的妹妹穿的比我還像新娘。我一直安慰自己擦酌,他們只是感情好,可當我...
    茶點故事閱讀 65,542評論 6 385
  • 文/花漫 我一把揭開白布菠劝。 她就那樣靜靜地躺著赊舶,像睡著了一般。 火紅的嫁衣襯著肌膚如雪赶诊。 梳的紋絲不亂的頭發(fā)上笼平,一...
    開封第一講書人閱讀 49,802評論 1 290
  • 那天,我揣著相機與錄音舔痪,去河邊找鬼寓调。 笑死,一個胖子當著我的面吹牛锄码,可吹牛的內(nèi)容都是我干的夺英。 我是一名探鬼主播,決...
    沈念sama閱讀 38,945評論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼滋捶,長吁一口氣:“原來是場噩夢啊……” “哼痛悯!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起重窟,我...
    開封第一講書人閱讀 37,709評論 0 266
  • 序言:老撾萬榮一對情侶失蹤载萌,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后巡扇,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體扭仁,經(jīng)...
    沈念sama閱讀 44,158評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,502評論 2 327
  • 正文 我和宋清朗相戀三年厅翔,在試婚紗的時候發(fā)現(xiàn)自己被綠了乖坠。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,637評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡知给,死狀恐怖瓤帚,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情涩赢,我是刑警寧澤戈次,帶...
    沈念sama閱讀 34,300評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站筒扒,受9級特大地震影響怯邪,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜花墩,卻給世界環(huán)境...
    茶點故事閱讀 39,911評論 3 313
  • 文/蒙蒙 一悬秉、第九天 我趴在偏房一處隱蔽的房頂上張望澄步。 院中可真熱鬧,春花似錦和泌、人聲如沸村缸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,744評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽梯皿。三九已至,卻和暖如春县恕,著一層夾襖步出監(jiān)牢的瞬間东羹,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,982評論 1 266
  • 我被黑心中介騙來泰國打工忠烛, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留属提,地道東北人。 一個月前我還...
    沈念sama閱讀 46,344評論 2 360
  • 正文 我出身青樓美尸,卻偏偏與公主長得像冤议,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子火惊,可洞房花燭夜當晚...
    茶點故事閱讀 43,500評論 2 348

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

  • 【轉(zhuǎn)載】原文地址:std::string詳解作者:kieven2008 之所以拋棄char*的字符串而選用C++標...
    VAYY閱讀 639評論 0 2
  • strings.h #ifndef _STRINGS_H#define _STRINGS_H#include #...
    老練子丶2017閱讀 390評論 0 0
  • 開淘寶的人一直以一個直線上漲模式 屹耐。開網(wǎng)店的人越來越多 因為都知道掙錢 但是真正掙到錢的不怎么多 尸疆。網(wǎng)店市場生存空...
    枉自i閱讀 526評論 0 1
  • 想要做一個成功的團隊管理者寿弱,第一位的是人品,這是能做成事的原則按灶,做人症革,要仁愛,誠信鸯旁,有一顆善心噪矛,多...
    時強閱讀 1,572評論 0 3
  • 我們步入了一個新的時代。 在中國铺罢,逐漸流行起來的信息傳送成為了人們熱議的話題艇挨,始終有許多的人在呼喚人們回歸原始,不...
    sinken閱讀 664評論 0 2