学学习网 手机版

学学习网

学习路径: 学习首页 > 应用开发 > c++ >

第五节 数组 (Arrays)(4)

设置字体:
----------------------------------

mystring[5] = '\0';
但正如你可能想到的,这并不是一个实用的方法。通常给数组赋值,或更具体些,给字符序列赋值的方法是使用一些函数,例如strcpy。strcpy (string copy) 在函数库cstring (string.h) 中被定义,可以用以下方式被调用:
strcpy (string1, string2);
这个函数将string2 中的内容拷贝给string1。string2 可以是一个数组,一个指针,或一个字符串常量constant string。因此用下面的代码可以将字符串常量"Hello"赋给mystring:
strcpy (mystring, "Hello");
例如:
// setting value to string
#include <iostream.h>
#include <string.h>

int main () {
char szMyName [20];
strcpy (szMyName,"J. Soulie");
cout << szMyName;
return 0;
}
J. Soulie
注意:我们需要包括头文件才能够使用函数strcpy
虽然我们通常可以写一个像下面setstring一样的简单程序来完成与cstringstrcpy同样的操作:
// setting value to string
#include <iostream.h>

void setstring (char szOut [ ], char szIn [ ]) {
int n=0;
do {
szOut[n] = szIn[n];
} while (szIn[n++] != '\0');
}

int main () {
char szMyName [20];
setstring (szMyName,"J. Soulie");
cout << szMyName;
return 0;
}
J. Soulie
另一个给数组赋值的常用方法是直接使用输入流(cin)。在这种情况下,字符序列的值是在程序运行时由用户输入的。
当cin 被用来输入字符序列值时,它通常与函数getline 一起使用,方法如下:
cin.getline ( char buffer[], int length, char delimiter = ' \n');
这里buffer 是用来存储输入的地址(例如一个数组名),length 是一个缓存buffer 的最大容量,而delimiter 是用来判断用户输入结束的字符,它的默认值(如果我们不写这个参数时)是换行符newline character ('\n')。
下面的例子重复输出用户在键盘上的任何输入。这个例子简单的显示了如何使用cin.getline来输入字符串:
// cin with strings
#include <iostream.h>

int main () {
char mybuffer [100];
cout << "What's your name? ";
cin.getline (mybuffer,100);
cout << "Hello " << mybuffer << ".\n";
cout << "Which is your favourite team? ";
cin.getline (mybuffer,100);
cout << "I like " << mybuffer << " too.\n";
return 0;
}
What's your name? Juan
Hello Juan.
Which is your favourite team? Inter Milan
I like Inter Milan too.
注意上面例子中两次调用cin.getline 时我们都使用了同一个字符串标识 (mybuffer)。程序在第二次调用时将新输入的内容直接覆盖到第一次输入到buffer 中的内容。
你可能还记得,在以前与控制台(console)交互的程序中,我们使用extraction operator (>>) 来直接从标准输入设备接收数据。这个方法也同样可以被用来输入字符串,例如,在上面的例子中我们也可以用以下代码来读取用户输入:
cin >> mybuffer;
这种方法也可以工作,但它有以下局限性是cin.getline所没有的:
  • 它只能接收单独的词(而不能是完整的句子),因为这种方法以任何空白符为分隔符,包括空格spaces,跳跃符tabulators,换行符newlines和回车符arriage returns。
  • 它不能给buffer指定容量,这使得程序不稳定,如果用户输入超出数组长度,输入信息会被丢失。
因此,建议在需要用cin来输入字符串时,使用cin.getline来代替cin >>。
 
字符串和其它数据类型的转换(Converting strings to other types)
鉴于字符串可能包含其他数据类型的内容,例如数字,将字符串内容转换成数字型变量的功能会有用处。例如一个字符串的内容可能是"1977",但这一个5个字符组成序列,并不容易转换为一个单独的整数。因此,函数库cstdlib (stdlib.h) 提供了3个有用的函数:
----------------------------------
课程列表
重点难点
赞助链接