正文

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

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


3.3.6  循環(huán)訪問string對象

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

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

{

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

}

循環(huán)從0開始直到11,訪問了phrase的所有合法位置。每次迭代過程中,通過phrase[i]顯示string對象的字符。注意,循環(huán)變量i是unsigned int型的,因為size()的返回值是無符號的整型值。

現實世界

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

3.3.7  使用find()成員函數

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

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

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

find()成員函數在string對象中搜索作為實參提供的"Over"字符串。該成員函數的返回值是要搜索的string對象在調用string對象中第一次出現的位置。也就是說,phrase.find("Over")返回"Over"在phrase中第一次出現的位置。因為phrase為"Lame Over!!!",所以find()的返回值為5(記住,位置從0開始,所以5表示第6個字符)。

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

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

{

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

}

因為phrase中不存在"eggplant",所以find()返回文件string中定義的一個特殊常量,該常量通過string::npos來訪問。因此,屏幕顯示消息“'eggplant' is not in the phrase.”。

通過string::npos訪問的常量表示string對象可能的最大長度。因此,它比對象中的任意可能的合法位置都要大。通俗地講,它表示“一個不可能存在的位置”。這是說明無法找到子字符串的絕佳返回值。

提示

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

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


上一章目錄下一章

Copyright ? 讀書網 www.afriseller.com 2005-2020, All Rights Reserved.
鄂ICP備15019699號 鄂公網安備 42010302001612號