正文

for循環(huán)、字符串與數(shù)組(6)

通過游戲編程實戰(zhàn)教新手學(xué)C++編程 作者:(美)Michael Dawson


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ù)時要小心。


上一章目錄下一章

Copyright ? 讀書網(wǎng) ranfinancial.com 2005-2020, All Rights Reserved.
鄂ICP備15019699號 鄂公網(wǎng)安備 42010302001612號