正文

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

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


3.3.2  創(chuàng)建string對(duì)象

main()函數(shù)做的第一件事情就是以三種不同方式創(chuàng)建了三個(gè)字符串。

string word1 = "Game";

string word2("Over");

string word3(3, '!');

其中第一行簡(jiǎn)單地使用賦值運(yùn)算符創(chuàng)建string對(duì)象word1,這與之前見過的其他變量的賦值情況一樣。因此,word1的值為"Game"。

第二行創(chuàng)建word2的方式是將作為該變量值的string對(duì)象置于一對(duì)括號(hào)中。因此,word2的值為"Over"。

最后一行創(chuàng)建word3的方式是在一對(duì)括號(hào)中置入一個(gè)數(shù)后再加上一個(gè)字符。這樣生成的string對(duì)象由提供給它的字符組成,且長(zhǎng)度等于提供的數(shù)。因此,word3的值為"!!!"。

3.3.3  string對(duì)象的連接

接下來(lái),程序通過將前3個(gè)string對(duì)象連接起來(lái)創(chuàng)建新的string對(duì)象phrase:

string phrase = word1 + " " + word2 + word3;

因此,phrase的值為"Game Over!!!"。

注意+運(yùn)算符,以前它只是與數(shù)字一起使用,現(xiàn)在也可以用于連接string對(duì)象。這是因?yàn)?運(yùn)算符被重載了。運(yùn)算符重載重定義常見的運(yùn)算符,這樣在新的、原來(lái)未定義的上下文中,它會(huì)起到不同的作用。在這里,代碼中的+運(yùn)算符不是用于將值相加,而是用于連接string對(duì)象。之所以能這么做,是因?yàn)閟tring類型明確重載了+運(yùn)算符,并將其定義為當(dāng)用于字符串時(shí)進(jìn)行連接操作。

3.3.4  使用size()成員函數(shù)

現(xiàn)在介紹string的成員函數(shù)。下面的代碼使用了成員函數(shù)size():

cout << "The phrase has " << phrase.size() << " characters in it.\n\n";

phrase.size()通過成員選擇運(yùn)算符.(點(diǎn)號(hào))調(diào)用string對(duì)象phrase的成員函數(shù)size()。成員函數(shù)size()僅返回表示string對(duì)象大小(所包含的字符數(shù))的無(wú)符號(hào)整型值。因?yàn)閟tring對(duì)象是"Game Over!!!",該成員函數(shù)返回的值為12(每個(gè)字符都要計(jì)算在內(nèi),包括空格)。當(dāng)然,調(diào)用另一個(gè)string對(duì)象的size()返回的字符個(gè)數(shù)可能不一樣,這取決于該string對(duì)象中字符的個(gè)數(shù)。

提示

string對(duì)象還包含一個(gè)成員函數(shù)length(),同size()一樣,該函數(shù)返回string對(duì)象中字符的個(gè)數(shù)。

3.3.5  索引string對(duì)象

string對(duì)象存儲(chǔ)一個(gè)char型值的序列。給對(duì)象提供下標(biāo)運(yùn)算符([])和索引號(hào)就可以訪問其中的任意一個(gè)char型值。這是接下來(lái)將介紹的內(nèi)容:

cout << "The character at position 0 is: " << phrase[0] << "\n\n";

序列中第一個(gè)元素的位置為0。上面語(yǔ)句中的phrase[0]是字符G。因?yàn)橛?jì)數(shù)從0開始,所以雖然string對(duì)象中包含12個(gè)字符,但是它的最后一個(gè)字符是phrase[11]。

陷阱

經(jīng)常易犯的一個(gè)錯(cuò)誤就是忘記索引是從0開始的。記住,包含n個(gè)字符的string對(duì)象的索引是0~n-1。

不僅可以通過下標(biāo)運(yùn)算符訪問string對(duì)象中的字符,還可以對(duì)它們重新賦值,如下所示:

phrase[0] = 'L';

可以將phrase的第一個(gè)字符修改為字符L,這樣phrase就成了"Lame Over!!!"。

陷阱

當(dāng)使用string對(duì)象和下標(biāo)運(yùn)算符時(shí),C++編譯器不執(zhí)行邊界檢查。這意味著編譯器不檢查程序是否試圖訪問不存在的元素。訪問非法的序列元素可能導(dǎo)致災(zāi)難性的后果,因?yàn)檫@可能覆蓋掉計(jì)算機(jī)內(nèi)存中的關(guān)鍵數(shù)據(jù)。這樣可能導(dǎo)致程序崩潰,所以在使用下標(biāo)運(yùn)算符訪問數(shù)據(jù)時(shí)要小心。


上一章目錄下一章

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