用来存放字符数据的数组是字符数组。字符数组中的一个元素存放一个字符。
字符数组的定义。字符数组的定义方式为:类型说明符 数组名[常量表达式];。
字符数组的初始化。对字符数组初始化,最容易理解的方式是逐个字符赋值给数组中各个元素。例如:char c[10]={'i',' ','a','m',' ','h','a','p','p','y'};。把10个字符分别赋值给c[0]~c[9]这10个元素。
如果花括号中提供的初值个数(即字符个数)大于数组长度,则按语法错误处理。如果初值个数小于数组长度,则只将这些字符赋给数组中前面那些元素,其余的元素自动定义为空字符('\0')。
如果提供的初值个数与预定的数组长度相同,在定义时可以省略数组长度,系统会自动根据初值个数确定数组长度。
字符数组的引用。可以引用字符数组中的一个元素,得到一个字符。
字符串和字符串结束标志。C语言中规定,以字符'\0'作为字符串结束的标志。
用字符串常量来使字符数组初始化。例如:char c[10]="i am happy";。
字符数组的输入输出。字符数组的输入输出可以有两种方法。
(1)逐个字符输入输出。用格式符“%c”输入或输出一个字符。
(2)将整个字符串一次输入或输出。用“%s”格式符,意思是对字符串(string)的输入输出。
输出字符不包括结束符'\0'。用“%s”格式符输出字符串时,printf函数中的输出项是字符数组名,而不是数组元素名。如果数组长度大于字符串的实际长度,也只输出到遇'\0'结束。如果一个字符数组中包含一个以上'\0',则遇第一个'\0'时就输出结束。
可以用scanf函数输入一个字符串。例如:scanf("%s",c);。scanf函数中的输入项如果是字符数组名,不要再加地址符&,因为在C语言中数组名代表该数组的起始地址。
字符串处理函数。
puts函数。其一般形式为:puts(字符数组)。其作用是将一个字符串(以'\0'结束的字符序列)输出到终端。用puts函数输出的字符串中可以包含转义字符。
gets函数。其一般形式为:gets(字符数组)。其作用是从终端输入一个字符串到字符数组,并且得到一个函数值。该函数值是字符串的起始地址。用puts和gets函数只能输出或输入一个字符串。
strcat函数。其一般形式为:strcat(字符数组1,字符数组2)。strcat是string catenate(字符串连接)的缩写。其作用是连接两个字符数组中的字符串,把字符串2接到字符串1的后面,结果放在字符数组1中,函数调用后得到一个函数值——字符数组1的地址。
字符数组1的空间必须足够大,以便容纳连接后的新字符串。如果连接前两个字符串后面都有'\0',连接时将字符串1后面的'\0'取消,只在新串最后保留'\0'。
strcpy和strncpy函数。其一般形式为:strcpy(字符数组1,字符串2)。strcpy是string和copy(字符串复制)的简写。它是”字符串复制函数“,作用是将字符串2复制到字符数组1中去。
字符数组1必须定义的足够大,以便容纳被复制的字符串。字符数组1的长度不应小于字符串2的长度。”字符数组1“必须写成数组名形式,”字符串2“可以是字符数组名,也可以是一个字符串常量。如果在复制前未对字符数组1赋值,则字符数组1各字节中的内容是无法预知的,复制时将字符串2中的字符串和其后的'\0'一起复制到字符数组1中,取代字符数组1中前面的字符,字符数组1中后面的字符不变。不能用赋值语句将一个字符串常量或字符数组直接给一个字符数组,而只能用strcpy函数将一个字符串复制到另一个字符数组中去。用赋值语句只能将一个字符赋给一个字符型变量或字符数组元素。可以用strncpy函数将字符串2中前n个字符复制到字符数组1中去。例如:strncpy(str1,str2,2);。
strcmp函数。其一般形式为:strcmp(字符串1,字符串2)。strcmp是string compare(字符串比较)的缩写。它的作用是比较字符串1和字符串2。比较的结果由函数值带回。如果字符串1=字符串2,则函数值为0;如果字符串1>字符串2,则函数值为一个正数;如果字符串1<字符串2,则函数值为一个负数。
strlen函数。其一般形式为:strlen(字符数组)。strlen是string length(字符串长度)的缩写。它是测试字符串长度的函数。函数的值为字符串中的实际长度(不包括'\0'在内)。
strlwr函数。其一般形式为:strlwr(字符串)。strlwr是string lowercase(字符串小写)的缩写。函数的作用是将字符串中大写字母换成小写字母。
strupr函数。其一般形式为:sreupr(字符串)。strupr是string uppercase(字符串大写)的缩写。函数的作用是将字符串中小写字母换成大写字母。
例题:输入3个字符串,要求找出其中最大者。
#include
#include
void main( )
{
char string[20];
char str[3][20];
int i;
for(i=0;i<3;i++)
gets(str[i]);
if(strcmp(str[0],str[1])>0)
strcpy(string,str[0]);
else
strcpy(string,str[1]);
if(strcmp(str[2],string)>0)
strcpy(string,str[2]);
printf("\n最大者是:\n%s\n",string);
} |
|