正文

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

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


3.3.6  循環(huán)訪問(wèn)string對(duì)象

具備了前面介紹的有關(guān)for循環(huán)和string對(duì)象的新知識(shí)后,循環(huán)訪問(wèn)string對(duì)象中的單個(gè)字符就變得非常簡(jiǎn)單,如下面的代碼所示:

for (unsigned int i = 0; i < phrase.size(); ++i)

{

cout << "Character at position " << i << " is: " << phrase[i] << endl;

}

循環(huán)從0開(kāi)始直到11,訪問(wèn)了phrase的所有合法位置。每次迭代過(guò)程中,通過(guò)phrase[i]顯示string對(duì)象的字符。注意,循環(huán)變量i是unsigned int型的,因?yàn)閟ize()的返回值是無(wú)符號(hào)的整型值。

現(xiàn)實(shí)世界

序列的循環(huán)訪問(wèn)是游戲中一項(xiàng)強(qiáng)大且常用的技術(shù)。例如,您也許要在策略游戲中循環(huán)訪問(wèn)數(shù)以百計(jì)的獨(dú)立單元,更新它們的狀態(tài)和順序,或者要循環(huán)訪問(wèn)一連串3D模型頂點(diǎn)來(lái)實(shí)現(xiàn)某種幾何變換。

3.3.7  使用find()成員函數(shù)

接下來(lái)程序使用成員函數(shù)find()來(lái)檢查兩個(gè)字符串字面值是否包含在phrase中。首先檢查的是字符串字面值"Over":

cout << "\nThe sequence 'Over' begins at location ";

cout << phrase.find("Over") << endl;

find()成員函數(shù)在string對(duì)象中搜索作為實(shí)參提供的"Over"字符串。該成員函數(shù)的返回值是要搜索的string對(duì)象在調(diào)用string對(duì)象中第一次出現(xiàn)的位置。也就是說(shuō),phrase.find("Over")返回"Over"在phrase中第一次出現(xiàn)的位置。因?yàn)閜hrase為"Lame Over!!!",所以find()的返回值為5(記住,位置從0開(kāi)始,所以5表示第6個(gè)字符)。

但是如果要搜索的字符串在調(diào)用字符串中不存在,結(jié)果會(huì)怎樣?下面介紹了處理這種情況的方法:

if (phrase.find("eggplant") == string::npos)

{

cout << "'eggplant' is not in the phrase.\n\n";

}

因?yàn)閜hrase中不存在"eggplant",所以find()返回文件string中定義的一個(gè)特殊常量,該常量通過(guò)string::npos來(lái)訪問(wèn)。因此,屏幕顯示消息“'eggplant' is not in the phrase.”。

通過(guò)string::npos訪問(wèn)的常量表示string對(duì)象可能的最大長(zhǎng)度。因此,它比對(duì)象中的任意可能的合法位置都要大。通俗地講,它表示“一個(gè)不可能存在的位置”。這是說(shuō)明無(wú)法找到子字符串的絕佳返回值。

提示

當(dāng)使用find()時(shí),可以提供一個(gè)可選實(shí)參,用于指定查找子字符串的起始位置。下面一行代碼將從string對(duì)象phrase的位置5開(kāi)始查找字符串字面值"eggplant"。

location = phrase.find("eggplant", 5);


上一章目錄下一章

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