日韩精品 中文字幕 动漫,91亚洲午夜一区,在线不卡日本v一区v二区丶,久久九九国产精品自在现拍

正文

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

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


3.4.4  使用數(shù)組元素的成員函數(shù)

使用數(shù)組元素成員函數(shù)的方法是寫出數(shù)組元素,在后面跟上成員選擇運算符和成員函數(shù)名稱。聽起來有些復(fù)雜,其實不然,如下例所示:

cout << inventory[0].size() << " letters in it.\n";

代碼inventory[0].size()的意思是程序調(diào)用元素inventory[0]的成員函數(shù)size()。因為此處的inventory[0]是"battle axe",所以調(diào)用返回該string對象的字符個數(shù)10。

3.4.5  數(shù)組邊界

之前已經(jīng)介紹過,索引數(shù)組時要小心。因為數(shù)組的大小是固定的,所以可以創(chuàng)建一個整型常量存儲數(shù)組的大小。程序的開頭部分就采取了這種做法:

const int MAX_ITEMS = 10;

下面代碼在給主人公添加物品之前使用MAX_ITEMS進(jìn)行數(shù)組保護(hù):

if (numItems < MAX_ITEMS)

{

inventory[numItems++] = "healing potion";

}

else

{

cout << "You have too many items and can’t carry another.";

}

這段代碼首先檢測numItems是否小于MAX_ITEMS。如果小于,則可以安全地把numItems當(dāng)作索引號使用,并賦給數(shù)組一個新的string對象。在本例中,numItems為3,所以字符串"healing potion"賦給了數(shù)組的位置3。如果不滿足小于條件,則顯示消息“You have too many items and can't carry another.”。

那么,如果使用數(shù)組邊界以外的元素會怎樣?這要視情況而定,因為這是在使用計算機內(nèi)存中未知的部分。最壞的情況是,如果試圖給數(shù)組邊界外的元素賦值,將導(dǎo)致程序行為不可預(yù)測,甚至程序崩潰。

可以在使用索引號之前對其進(jìn)行測試,以確保它是合法的數(shù)組位置。這種做法叫做邊界檢查。如果要使用的索引可能不合法,那么邊界檢查是必不可少的。

3.5  理解C風(fēng)格字符串

有string對象之前,C++程序員使用以空字符結(jié)尾的字符數(shù)組表示字符串。這些字符數(shù)組現(xiàn)在稱為C風(fēng)格字符串,因為這種表示字符串的習(xí)慣是從C程序開始的。聲明和初始化C風(fēng)格字符串的方法和其他數(shù)組一樣:

char phrase[] = "Game Over!!!";

C風(fēng)格字符串以一個稱為空字符的字符結(jié)尾。空字符可以寫成'\0'。上面的代碼不需要使用空字符,因為它已經(jīng)存儲在字符串的結(jié)尾處。所以,從技術(shù)上而言,phrase有13個元素(然而,使用C風(fēng)格字符串的函數(shù)則認(rèn)為phrase的長度為12,這是合理的,并且與string對象的工作原理一致)。

至于其他任意類型的數(shù)組,可以在定義時指定數(shù)組大小。因此,聲明和初始化C風(fēng)格字符串的另一種方式是:

char phrase[81] = "Game Over!!!";

這行代碼創(chuàng)建了一個可以容納80個可打印字符的C風(fēng)格字符串(另外還有一個終止空字符)。

C風(fēng)格字符串沒有成員函數(shù),但是作為標(biāo)準(zhǔn)庫一部分的cstring文件中包含了各種使用C風(fēng)格字符串的函數(shù)。

string對象的優(yōu)點在于,它們被設(shè)計為可以和C風(fēng)格字符串很好地結(jié)合使用。例如,下面給出的都是C風(fēng)格字符串和string對象的合法用法:

string word1 = "Game";

char word2[] = " Over";

string phrase = word1 + word2;

if (word1 != word2)

{

cout << "word1 and word2 are not equal.\n";

}

if (phrase.find(word2) != string::npos)

{

cout << "word2 is contained in phrase.\n";

}

string對象可以和C風(fēng)格字符串連接起來,但結(jié)果仍然是一個string對象(所以char phrase2[] = word1 + word2;會產(chǎn)生錯誤)。可以使用關(guān)系運算符比較string對象和C風(fēng)格字符串,甚至還可以將C風(fēng)格字符串用作string對象成員函數(shù)的實參。

C風(fēng)格字符串和數(shù)組有共同的缺點,其中最大的一個是它們的長度是固定的。因此,應(yīng)當(dāng)遵循的原則是:只要可能就使用string對象,但是如果有必要的話,需做好使用C風(fēng)格字符串的準(zhǔn)備。


上一章目錄下一章

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