標準庫型別String用法總結(1)
標頭檔案及名稱空間
#include<string>
using std::string
定義及初始化string物件
string s1; //預設初始化,s1是一個空串
string s2(s1);//s2是s1的副本
string s2=s1;//等價於s2(s1),s2是s1的副本
string s3("value");//s3是字面值"value"的副本,除了字面值最後那個空字元
string s3="value";//等價於s3("value"),s3是字面值"value"的副本
string s4(n,'c');//把s4初始化為由連續n個字元c組成的串
讀寫string物件
標準庫iostream中cin,cout可讀寫int,double等內建型別的值,同樣,也可以使用IO操作符讀寫string物件;
int main()
{
string s; //空字串
cin>>s; //將string物件讀入s,遇到空白停止
cout<<s<<endl; //輸出s
return 0;
}
在char型別中,有輸入函式scanf來讀取,但遇到空就會終止,同樣的,用cin來讀取string物件時,遇到空也會終止。比如程式輸入“Hello World!”,程式將輸出"Hello"。
當然,和內建型別的輸入操作一樣,string物件的此類操作也是返回運算子左側的運算物件作為其結果。因此,多個輸入或輸出也可以連在一起寫:
string s1,s2;
cin>>s1>>s2; //把第一個讀入s1中,第二個讀入s2中 輸入:Hello World
cout<<s1<<s2; //輸出兩個string物件 輸出:HelloWorld
讀入未知數量的string物件
int main()
{
string word;
while(cin>>word) //反覆讀取,直至到達檔案末尾
cout<<word<<endl; //逐個輸出單詞,每個單詞後緊跟一個換行符
return 0;
}
使用getline讀取一行
cin可以讀取string物件,但有一缺點就是遇到空格就結束,而getline剛好可以彌補這個缺點,讀取一行字串,包含空格,直到遇到第一個換行符,但不存放換行符。
int main()
{
stirng line;
//每次讀取一整行,直至達到檔案末尾
while(getline(cin,line))
cout<<line<<endl;
return 0;
}
string 的empty和size操作
empty函式判斷string物件是否為空,並返回一個bool值,如果為空,則返回true,否則返回false。
while(getline(cin,line))
{
if(!line.empty()) //若不為空則輸出物件line
cout<<line<<endl;
}
size函式返回string物件的長度(即string物件中字元的個數),可以使用size函式只輸出長度超過80的字串:
string line;
while(getline(cin,line))
if(line.size()>80)
cout<<line<<endl;
比較string物件
string類定義了幾種用於比較字串的運算子,這些運算子逐一比較string物件中的字元,並且對大小寫敏感。
相等性運算子:==和!= 檢驗兩個字串是否相等;
關係運算符:<,<=,>,>= 分別檢驗一個string物件是否小於,小於等於,大於,大於等於另外一個string物件。
上述運算子都依照(大小寫敏感)字典順序:
1.如果兩個string物件的長度不同,而且較短string物件的每個字元都與較長string物件對應位置上的字元相同,就說較短string物件小於較長string物件。
2.如果兩個string物件在某些對應的位置上不一致,則string物件比較的結果其實是string物件中第一對相異字元比較的結果。
為string物件賦值
string st1(10,'c'),st2;//st1的內容是 cccccccccc,st2是一個空字串
st1=st2;//賦值,用st2的副本替換st1的內容
//此時st1和st2都是空串
兩個string物件相加
string類允許使用加法運算子(+)將兩個string物件連線起來,也可使用複合賦值運算子(+=)把右側string物件的內容加到左側string物件的後面:
string s1="hello, ",s2="world\n";
string s3=s1+s2; //s3的內容是hello, world\n;
s1+=s2; //等價於s1=s1+s2
字面值與string物件相加
當把string物件和字元字面值及字串字面值混在一條語句中使用時,必須確保每個加法運算子的兩側物件至少有一個是string
string s1="hello",s2="world";
string s3=s1+', '+s2+'\n';
string s4=s1+', ';//正確,把一個string物件和一個字面值相加
string s5="hello"+', ';//錯誤,兩個運算子都不是string
string s6=s1+', '+"world";//正確,每個加法運算子都有一個運算物件string
string s7="hello"+', '+s2;//錯誤,不能直接將兩個字面值相加
處理string物件中字元的字元函式
在標頭檔案cctype中定義了一組標準庫函式處理字串中的字元
isalnum(c) 當c是字母或數字時為真
isalpha(c) 當c是字母時為真
iscntrl(c) 當c是控制字元時為真
isdigit(c) 當c是數字時為真
isgraph(c) 當c不是空格但可列印時為真
islower(c) 當c是小寫字母時為真
isprint(c) 當c是可列印字元時為真(即c是空格或c具有可視形式)
ispunct(c) 當c是標點符號時為真(即c不是控制字元、數字、字母、可列印空白中的一種)
isspace(c) 當c是空白時為真(即c是空格、橫向製表符、縱向製表符、回車符、換行符、進紙符中的一種)
isupper(c) 當c是大寫字母時為真
isxdigit(c) 當c是16進位制數字時為真
tolower(c) 如果c是大寫字母,輸出相應的小寫字母,否則原樣輸出
toupper(c) 如果c是小寫字母,輸出相應的大寫字母,否則原樣輸出