標準庫類型string表示可變長字符序列,使用之前需要包含string頭文件,它定義在命名空間std中。
string初始化string s1
string s2(s1)
string s2 = s1
string s3 = ("hello")
string s3("hello")
string s4(n,'c')
其中string s4的初始化等價於下面的語句:
string temp(8,'a');
string s5 = temp;
如果使用=初始化一個變量,執行的是拷貝初始化,編譯器把等號右邊的初始值拷貝到新創建的對象中,否則為直接初始化。
string操作讀寫string可以使用標準庫中的iostream來讀寫string對象。
例如:
#include<iostream>
using namespace std;
int main()
{
string s;
cin >> s;
cout<< s << endl;
return 0;
}
運行程序,在控制臺輸入: Hello world。
輸入和輸出結果如下:
Hello world
Hello
可以看到,string對象會自動忽略開頭的空白(空格符,換行符,制表符等)並從第一個真正的字符開始讀起,直到遇到下一處空白。
另外,string對象的輸入輸出操作會返回運算符左側運算對象,並將其作為結果:
cin >> s1 >> s2;
也就是說,對於上面的表達式,在運算cin >> s1之後,返回cin,繼續運算cin >> s2。最終會將第一個輸入讀到s1,第二個輸入讀到s2中。
讀取整行整行讀取可以使用getline函數。getline的讀取會保留輸入時的空白,遇到換行符才結束(換行符也被讀取進來了)。遇到空行時,讀取到的是空串。
#include<iostream>
using namespace std;
int main()
{
string line;
if(getline(cin,line))
{
cout<< line;
cout<< line;
}
return 0;
}
輸入輸出結果:
HELLO
HELLO HELLO
可以看到:
字符串比較比較s1和s2所含的字符是否完全一樣,可以使用下面的方式:
s1 == s2
string的大小比較是利用字符在字典序比較:
s1 > s2
s1 <= s2
例如:
s.empty()
例如:
s.size()
注意:這個表達式的返回值類型為string::size_type,它是一個無符號類型,因此避免用有符號類型,例如int來存儲或者比較其長度。一個無符號數和一個負的有符號數比較大小時,有符號數會被轉換為很大的無符號數,因此常常得到的結果就是這個無符號數小於這個負的有符號數。(可參考C語言入坑指南-整型的隱式轉換與溢出)
字符串相加有以下幾種方式:
s1 + s2
s1 + 「world」
注意:字符字面值和string對象使用+運算符時,兩側運算對象至少一個是string。
下面的操作是非法的:
strings s = "hello" + "world";
要訪問字符串中的字符,可直接使用下表運算符[],例如:
s[0]
s[s.size()-1]
遍歷字符串,可使用for each:
for(auto c : s)
cout << c << endl;
同樣也可以使用常規方式:
unsignen int loop ;
for(loop = 0; loop < s.size();loop++)
cout << s[loop] << endl;
關注公眾號【編程珠璣】,第一時間獲取更多原創技術文章
堅持原創