正文

for循环、字符串与数组(6)

通过游戏编程实战教新手学C++编程 作者:(美)Michael Dawson


3.3.2  创建string对象

main()函数做的第一件事情就是以三种不同方式创建了三个字符串。

string word1 = "Game";

string word2("Over");

string word3(3, '!');

其中第一行简单地使用赋值运算符创建string对象word1,这与之前见过的其他变量的赋值情况一样。因此,word1的值为"Game"。

第二行创建word2的方式是将作为该变量值的string对象置于一对括号中。因此,word2的值为"Over"。

最后一行创建word3的方式是在一对括号中置入一个数后再加上一个字符。这样生成的string对象由提供给它的字符组成,且长度等于提供的数。因此,word3的值为"!!!"。

3.3.3  string对象的连接

接下来,程序通过将前3个string对象连接起来创建新的string对象phrase:

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

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

注意+运算符,以前它只是与数字一起使用,现在也可以用于连接string对象。这是因为+运算符被重载了。运算符重载重定义常见的运算符,这样在新的、原来未定义的上下文中,它会起到不同的作用。在这里,代码中的+运算符不是用于将值相加,而是用于连接string对象。之所以能这么做,是因为string类型明确重载了+运算符,并将其定义为当用于字符串时进行连接操作。

3.3.4  使用size()成员函数

现在介绍string的成员函数。下面的代码使用了成员函数size():

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

phrase.size()通过成员选择运算符.(点号)调用string对象phrase的成员函数size()。成员函数size()仅返回表示string对象大小(所包含的字符数)的无符号整型值。因为string对象是"Game Over!!!",该成员函数返回的值为12(每个字符都要计算在内,包括空格)。当然,调用另一个string对象的size()返回的字符个数可能不一样,这取决于该string对象中字符的个数。

提示

string对象还包含一个成员函数length(),同size()一样,该函数返回string对象中字符的个数。

3.3.5  索引string对象

string对象存储一个char型值的序列。给对象提供下标运算符([])和索引号就可以访问其中的任意一个char型值。这是接下来将介绍的内容:

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

序列中第一个元素的位置为0。上面语句中的phrase[0]是字符G。因为计数从0开始,所以虽然string对象中包含12个字符,但是它的最后一个字符是phrase[11]。

陷阱

经常易犯的一个错误就是忘记索引是从0开始的。记住,包含n个字符的string对象的索引是0~n-1。

不仅可以通过下标运算符访问string对象中的字符,还可以对它们重新赋值,如下所示:

phrase[0] = 'L';

可以将phrase的第一个字符修改为字符L,这样phrase就成了"Lame Over!!!"。

陷阱

当使用string对象和下标运算符时,C++编译器不执行边界检查。这意味着编译器不检查程序是否试图访问不存在的元素。访问非法的序列元素可能导致灾难性的后果,因为这可能覆盖掉计算机内存中的关键数据。这样可能导致程序崩溃,所以在使用下标运算符访问数据时要小心。


上一章目录下一章

Copyright © 读书网 www.dushu.com 2005-2020, All Rights Reserved.
鄂ICP备15019699号 鄂公网安备 42010302001612号