必备技能 4.7: 字符串数组
一种特殊的二维数组就是字符串数组。在程序中使用字符串构成的数组并不罕见。比如在需要访问数据库的程序中,输入进程需要使用字符串数组来对用户键入的命令进行有效性验证。我们使用二维的字符数组来创建字符串数组。其中的左索引用来表示字符串的数量,右索引用来表示字符串的最大长度。包括字符串结束标志。例如,下面的代码片段声明了30个字符串的数组,每个字符串的最大长度维79,在加上一个结束表示共计为80。
char str_array[30][80];
对其中每一个单独字符串的访问是很简单的:我们只需要指定左索引即可。例如,下面gets()函数就用到了str_array的第三个字符串:
gets(str_array[2]);
访问第三个字符串的每个字符,我们可以使用如下的语句:
cout << str_array[2][3];
上面的语句把第三个字符串的第四个字符打印出来。
下面的程序通过实现一个简单的电话本功能来演示字符串数组的使用。二维数组numbers用来存储姓名和电话号码。查找电话号码时,输入姓名,程序会输出对应的电话号码。
//一个简单的电话本程序
#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
int i;
char str[80];
char numbers[10][80] =
{
"Tom","555-3322",
"Mary","555-8976",
"Jon","555-1037",
"Rachel","555-1400",
"Sherry","5558873"
};
cout << "Enter name: ";
cin >> str;
for ( i = 0; i < 10 ; i+=2 )//numbers[0]=tom,[1]=555-3322. tom下一个是第三个元素mary.
{
if (!strcmp(str, numbers[i] ))
{
cout << "Number is " << numbers [i+1] << "\n"; //电话号码总是对应在名字的下一个位置。
break;
}
}
if ( i == 10 )
{
cout << "Not found.\n";
}
return 0;
}
可能的输出结果如下:
Enter name: Jon
Number is 555-1037
注意在上面的for循环中循环控制变量的变化是每次递增2。这样作是非常有必要的,因为数组中的姓名和电话号码是交替出现的。
练习:
1. 写出如何用1,2,3,4来初始化一个有四个元素的整型数组。
2. 重写下面的初始化: char str[6]={‘H’, ‘e’, ‘l’, ‘l’, ‘o’, ‘\0’};
3. 用未指定大小数组的方式重新下面的代码:int nums[4]={44,55,66,77};