標准庫類型string表示可變長的字符序列,使用前先包含string頭文件。(哈哈,終於可以逃脫C語言中的str函數系列了。)因為是標准庫的一部分,所以string被定義在命名空間std中。所以你懂該怎麼做(參見筆記(2))。
在stl_string_fwd.h中找到如下語句:
typedef basic_string<char> string;
basic_string是一個模板類,在string中有定義。可以看是對char類型的一個封裝,未對其進行深挖,所以本次筆記只做為string操作手冊使用。
初始化string對象的方式:
string s1; //默認初始化,s1為空串 string s2(s1); //s2是s1的副本 string s2 = s1; //等價於上一行 string s3("test"); //s3是字面值"test"的副本,除了最後的空字符外 string s3 = "test"; //等價於上一行 string s4(n, 'c'); //s4被初始化為n個'c'組成的字符串 string s5(cp, n); //s5是cp指向的字符串數組中前n個字符的拷貝。此數組至少應該包含n個字符 string s6(s5, n); //s6是s5從下標n開始的字符的拷貝。若s5.size()<n,則構造函數行為未定義 string s6(s5, n, m); //s6是s5從下標n開始m個字符的拷貝。若s5.size()<n,則構造函數行為未定義。不管m值是多少,構造函數至多拷貝s5.size() - n個字符
string對象上的操作:
os << s 將s寫到輸入流os當中,返回os is >> s 從is中讀取字符串賦給s,字符串以空白分隔,返回is getline(is, s) 從is中讀取一行賦給s,返回is s.empty() 判斷s是否為空,為空返回true,否則返回false s.size() 返回s中字符的個數 s[n] 返回s中第n個字符的引用,位置n從0開始 s1 + s2 返回s1、s2拼接後的內容 s1 = s2 用s2的副本代替s1中內容 s1 == s2 判斷s1、s2是否相等 s1 != s2 是否不相等 <,<=,>,>= 利用字符在字典中的順序進行比較,從首個字符開始向後依次比較,一有結果立刻返回。
插入
s.insert(pos, args); //在pos之前插入args指定的字符。pos可以是一個下標或者迭代器。接受下標的版本返回一個指向s的引用,接受迭代器的版本返回指向第一個插入字符的迭代器。
刪除
s.erase(pos, len); //刪除從位置pos開始的len個字符。如果len被省略,則刪除從pos開始直至s末尾的所有字符。返回一個指向s的引用
替換
s.assign(args); //將s中的字符替換為args指定的字符。返回一個指向s的引用 s.replace(n, m, args); //刪除從下標n開始m個字符或刪除迭代器n和m表示的范圍中的字符,替換為args指定的字符。
追加
s.append(args); //將args中的字符追加到s中,返回一個指向s的引用
子字符串操作
s.substr(pos, n); //返回一個string,包含s中從pos開始的n個字符的拷貝。pos的默認值是0,n的默認值是s.size() - pos,即拷貝從pos開始的所有字符
搜索
s.find(args); //查找s中args第一次出現的位置 s.rfind(args); //查找s中args最後一次出現的位置 s.find_first_of(args); //在s中查找args中任何一個字符第一次出現的位置 s.find_last_of(args); //在s中查找args中任何一個字符最後一次出現的位置 s.find_first_not_of(args); //在s中查找第一個不在args中的字符 s.find_last_not_of(args); //在s中查找最後一個不在args中的字符
比較
s.compare(s1); //比較string s和s1 s1.compare(pos1, n1, s2); //將s1中從pos1開始的n1個字符與s2進行比較 s1.compare(pos1, n1, s2, pos2, n2); //將s中從pos1開始的n1個字符與s2中從pos2開始的n2個字符串進行比較 s.compare(cp); //比較s和cp指向的以空字符結尾的字符串數組 s1.compare(pos1, n1, cp); //將s1和從pos1開始的n1個字符與cp指向的以空字符結尾的字符串數組比較 s1.compare(pos1, n1, cp, n2); //將s1和從pos1開始的n1個字符與指針cp指向的地址開始的n2個字符進行比較
string和數值之間的轉換
to_string(var); //返回數值val的string表示。val可以是任意算術類型
/*返回s的起始子串的數值*/ stoi(s, p, b); //返回int型 stol(s, p, b); //返回long型 stoul(s, p, b); //返回unsigned long型 stoll(s, p, b); //返回long long型 stoull(s, p, b); //返回unsigned long long型 stof(s, p, b); //返回float型 stod(s, p, b); //返回double型 stold(s, p, b); //返回long double型 /*其中p為size_t類型的指針,用來存放第一個非數值字符的下標,默認為0*/ /*b表示進制,默認為10*/
此處應注意在string轉數值時,所提供的string中第一個非空白字符必須是數值中可能出現的字符!