標準庫型別string表示可變長的字串行,使用之前必須包含string標頭檔案,string定義在命名空間std中。
在執行讀寫操作時,string物件會自動忽略開頭的空白(即空格符、換行符、製表符等)並從第乙個真正的字元讀起,直到遇到下一處空白為止。
#include
#include
using
namespace
std;
int main()
如上所述,如果程式輸入是「 hello world! 」(開頭和結尾都有空格),則輸出將是「hello」,輸出結果沒有任何空格。
有時我們希望保留輸入時的空白符,得到一整行字串,這時應該用getline函式代替原來的》運算子。getline函式的引數是乙個輸入流和乙個string物件,getline函式讀取輸入直到遇到換行符結束(注意換行符也被讀進來了),然後將換行符之前的內容寫入到string物件中(換行符被丟棄了)。
#include
#include
using
namespace
std;
int main()
return
0;}
上述**實現讀取輸入的一行字元並輸出,而非遇到空格就結束輸入。
empty函式根據string物件是否為空返回乙個對應的bool值。
bool型的值true和false不能單純的看做1和0!例如:
bool flag;
if(flag) //正確,不能寫成if(flag == 1)
if(!flag) //正確,不能寫成if(flag == 0)
string的size函式返回值型別是string::size_type,它是乙個無符號型別值,在c++11新標準中,允許編譯器通過auto或者decltype來推斷變數的型別:
string line;
auto len = line.size(); //len的型別是string::size_type
tip:如果乙個表示式中已經有了size()函式就不要再使用int了,這樣可以避免混用int和unsigned可能帶來的問題。
string中因為沿用c語言的習慣保留了length()函式,在c++標準庫中,兩個函式的實現是一樣的,所以二者沒有區別。
標準庫型別和迭代器介紹可參見我的這篇博文:資料結構與演算法(c++版):表、棧和佇列
陣列是一種類似標準庫型別vector的資料結構,但在效能和靈活性上與vector有所不同。
相似點:陣列也是存放型別相同物件的容器,需要通過位置訪問。
不同點:陣列大小固定不變,對某些特殊的應用效能較好,但同樣損失了些靈活性。
不能將陣列的內容拷貝給其他陣列作為其初始值,也不能用陣列為其他陣列賦值:
int a = ; //含有3個整數的陣列
int a2 = a; //錯誤:不允許使用陣列初始化陣列
a2 = a; //錯誤:不能把乙個陣列直接賦值給另乙個陣列
不能用string物件直接初始化指向字元的指標!為了完成此功能,string專門提供了乙個名為c_str的成員函式:
string s("hello world"); //字串字面值直接初始化string物件
char *str = s; //錯誤:不能用string物件初始化char*
const
char *str = s.c_str(); //正確
三 字串 向量和陣列
一 標準庫型別string 1 使用等號 初始化乙個變數,執行的是拷貝初始化,編譯器把等號右側的初始值拷貝到新建立的物件中 如何不使用等號,則執行的是直接初始化。2 os is s 從is中讀取字串賦給s,字串以空白分隔,返回is getline is,s 從is中讀取一行賦給s,返回is 3 st...
三 字串 向量 陣列
直接初始化和拷貝初始化 string s1 10,c string s2 string 10,c 會影響效能 s1.size 返回物件中字元的個數,型別為string size type,是無符號型別,不要與有符號型別混用 範圍 for string str some string for auto...
Python學習筆記(三) 字串
字串索引 python字串索引從0開始,負索引從 1開始。0表示第乙個字元,1表示最後乙個字元。字元都有對應的編碼,可以使用ord a 函式檢視。熟悉unicode和ascii編碼。幾種常見的字元 反斜槓 單引號 雙引號 換行符 n 回車 r 和水平製表符 t 標準字串函式,在 中顯示 常用標準字串...