3.3.2 創(chuàng)建string對象
main()函數(shù)做的第一件事情就是以三種不同方式創(chuàng)建了三個字符串。
string word1 = "Game";
string word2("Over");
string word3(3, '!');
其中第一行簡單地使用賦值運算符創(chuàng)建string對象word1,這與之前見過的其他變量的賦值情況一樣。因此,word1的值為"Game"。
第二行創(chuàng)建word2的方式是將作為該變量值的string對象置于一對括號中。因此,word2的值為"Over"。
最后一行創(chuàng)建word3的方式是在一對括號中置入一個數(shù)后再加上一個字符。這樣生成的string對象由提供給它的字符組成,且長度等于提供的數(shù)。因此,word3的值為"!!!"。
3.3.3 string對象的連接
接下來,程序通過將前3個string對象連接起來創(chuàng)建新的string對象phrase:
string phrase = word1 + " " + word2 + word3;
因此,phrase的值為"Game Over!!!"。
注意+運算符,以前它只是與數(shù)字一起使用,現(xiàn)在也可以用于連接string對象。這是因為+運算符被重載了。運算符重載重定義常見的運算符,這樣在新的、原來未定義的上下文中,它會起到不同的作用。在這里,代碼中的+運算符不是用于將值相加,而是用于連接string對象。之所以能這么做,是因為string類型明確重載了+運算符,并將其定義為當用于字符串時進行連接操作。
3.3.4 使用size()成員函數(shù)
現(xiàn)在介紹string的成員函數(shù)。下面的代碼使用了成員函數(shù)size():
cout << "The phrase has " << phrase.size() << " characters in it.\n\n";
phrase.size()通過成員選擇運算符.(點號)調(diào)用string對象phrase的成員函數(shù)size()。成員函數(shù)size()僅返回表示string對象大小(所包含的字符數(shù))的無符號整型值。因為string對象是"Game Over!!!",該成員函數(shù)返回的值為12(每個字符都要計算在內(nèi),包括空格)。當然,調(diào)用另一個string對象的size()返回的字符個數(shù)可能不一樣,這取決于該string對象中字符的個數(shù)。
提示
string對象還包含一個成員函數(shù)length(),同size()一樣,該函數(shù)返回string對象中字符的個數(shù)。
3.3.5 索引string對象
string對象存儲一個char型值的序列。給對象提供下標運算符([])和索引號就可以訪問其中的任意一個char型值。這是接下來將介紹的內(nèi)容:
cout << "The character at position 0 is: " << phrase[0] << "\n\n";
序列中第一個元素的位置為0。上面語句中的phrase[0]是字符G。因為計數(shù)從0開始,所以雖然string對象中包含12個字符,但是它的最后一個字符是phrase[11]。
陷阱
經(jīng)常易犯的一個錯誤就是忘記索引是從0開始的。記住,包含n個字符的string對象的索引是0~n-1。
不僅可以通過下標運算符訪問string對象中的字符,還可以對它們重新賦值,如下所示:
phrase[0] = 'L';
可以將phrase的第一個字符修改為字符L,這樣phrase就成了"Lame Over!!!"。
陷阱
當使用string對象和下標運算符時,C++編譯器不執(zhí)行邊界檢查。這意味著編譯器不檢查程序是否試圖訪問不存在的元素。訪問非法的序列元素可能導(dǎo)致災(zāi)難性的后果,因為這可能覆蓋掉計算機內(nèi)存中的關(guān)鍵數(shù)據(jù)。這樣可能導(dǎo)致程序崩潰,所以在使用下標運算符訪問數(shù)據(jù)時要小心。