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

之前章节已经介绍了如何使用单个值,本章将介绍如何使用数据序列。您将学习更多有关字符串(字符序列的对象)的知识。本章还将介绍如何使用任意类型的序列,以及一种非常适合于与这些序列一起使用的新型循环。具体而言,本章内容如下:

● 使用for循环对序列进行遍历

● 使用组合了数据和函数的对象

● 使用string对象及其成员函数处理字符序列

● 使用数组对任意类型序列进行存储、访问和操作

● 使用多维数组更好地表示某种数据集合

3.1  使用for循环

第2章已经介绍了一种循环:while循环。现在介绍另外一种循环,即for循环。与while循环一样,for循环允许重复执行一段代码,但是它特别适合于计数以及遍历序列数据(如RPG游戏中角色物品栏中的物品)。

下面给出for循环的一般形式:

for (initialization; test; action)

statement;

initialization是为循环设置初始条件的语句(例如,它可能将计数器变量的值置为0)。每次在执行循环体之前都要对表达式test进行测试,就像while循环一样。如果test为false,程序转移到循环之后的语句。如果test为true,则执行statement。接下来执行action(通常是增加计数器变量的值)。该过程将一直重复,直到test为false,随后循环终止。

3.1.1  Counter程序简介

Counter程序向前、向后以及每次隔5进行计数,甚至还绘出一个有行有列的网格。这些全都是通过for循环来完成的。程序运行示例如图3-1所示。

图3-1  for循环完成全部的计数工作,而一对嵌套的for循环显示了网格

从Course Technology网站(www.courseptr.com/downloads)或本书合作网站(http://www. tupwk.com.cn/downpage)上可以下载到该程序的代码。程序位于Chapter 3文件夹中,文件名为counter.cpp。

// Counter

// Demonstrates for loops

#include <iostream>

using namespace std;

int main()

{

cout << "Counting forward:\n";

for (int i = 0; i < 10; ++i)

{

cout << i << " ";

}

cout << "\n\nCounting backward:\n";

for (int i = 9; i >= 0; --i)

{

cout << i << " ";

}

cout << "\n\nCounting by fives:\n";

for (int i = 0; i <= 50; i += 5)

{

cout << i << " ";

}

cout << "\n\nCounting with null statements:\n";

int count = 0;

for ( ; count < 10; )

{

cout << count << " ";

++count;

}

cout << "\n\nCounting with nested for loops:\n";

const int ROWS = 5;

const int COLUMNS = 3;

for (int i = 0; i < ROWS; ++i)

{

for (int j = 0; j < COLUMNS; ++j)

{

cout << i << "," << j << " ";

}

cout << endl;

}

return 0;

}

陷阱

如果您使用的是较早的、没有完全实现当前的C++标准的编译器,在编译这个程序时,可能会遇到像error: 'i' : redefinition; multiple initialization这样的错误。

最好的解决办法是使用一款现代的兼容编译器。幸运的是,从网站http://www. microsoft.com/express/上可以下载到流行(且免费)的Microsoft Visual C++ Express Edition IDE,其中包含一款现代编译器。

如果必须使用早期的编译器,则应当在同一作用域中为所有的for循环声明一次计数器变量。第5章中将介绍作用域的概念。

读书导航