1.字符数组的定义
char c[5];
用关键字char定义字符型数组c,c数组长度为5,即包含5个数组元素,每个元素
存放一个字符。可直接使用赋值语句对字符数组元素赋值。
c[0]=’c’ ;
2.字符数组的初始化
也可以在定义数组的同时,对数组元素进行初始化。
char c[5]={′C′,′h′,′i′,′n′,′a′};
若数组长度为10,只给部分元素初始化,其余元素为空字符′\0′。′\0′代表ASCII码为0的字符,是一个空操作符,什么都不做,仅用它作为字符串结束标志。
3.数组元素的引用
输出数组中的字符
for(i=0;i<5;i++)
printf(″%c″,c[i] ); 用%c格式逐个字符输出
输出结果为china,多个字符,即字符串。
也可直接用字符串常量对字符数组进行初始化:
char c[]={″China″}; 或
char c[]=″China″; 该初始化方式更简单
等价于:
char c[]={′C′,′h′,′i′,′n′,′a′,′\0′}; 在原基础上增加一个\0
%c输出一个字符,%s输出一个字符串。
printf(″%s″,c );
用%s格式输出字符串时,输出项是字符数组名,而不是数组元素。
错误: printf(″%s″,c[i] );
数组名代表数组的起始地址,表示从这个起始地址开始逐个输出其中的字符,直到遇
′\0′为止不再输出。′\0′为空操作符,不显示。
可用scanf函数输入一个字符串:
char c[10];
scanf(″%s″,c); 因为数组名本身就代表该数组的起始地址,所以数组名前不要再加地址符&.
4.字符串处理函数
puts:输出字符串 gets:输入字符串
strcpy:字符串复制 strcmp:字符串比较
strcat:字符串连接 strlen:求字符串的长度
stulwr:将字符串转换成小写形式 strupr:将字符串转换成大写形式
①puts函数
形式: puts (字符数组)
作用:将一个字符串输出到终端。
char s[]={″China″};
puts(s);
puts(″Beijing″); 括号里的参数可以是字符数组,也可以是字符串常量。
输出字符串后自动换行。
②gets函数
形式:gets(字符数组)
作用:输入一个字符串到字符数组。
gets(s);
注:puts和gets只能输入或输出一个字符串。
puts(s1,s2);
或 gets(s1,s2);
③strcpy函数
形式:strcpy(字符数组1,字符串2)
作用:将字符串2复制到字符数组1中。
例如:
char s[10],t[]={″China″};
strcpy(s,t);
puts(s);
错误:s=t;
s=″China″;
④strcmp函数
形式:strcmp (字符串1,字符串2)
作用:比较两个字符串的大小。
例如:strcmp(s1,s2);
strcmp(″China″″Chine″);
逐个字符按ASCII码值比较
比较的结果由函数值带回:
(1)字符串1=字符串2,函数值为0 ;
(2)字符串1>字符串2,函数值为1 ;
(3)字符串1<字符串2,函数值为-1。
错误:if(s1>s2) printf(″yes\n″);
正确:if(strcmp(s1,s2)>0) printf(″ yes\n ″);
⑤strcat函数
形式:strcat(字符数组1,字符数组2)
作用:连接两个字符数组中的字符串,结果 放在字符数组1中。
⑥strlen函数
形式:strlen (字符数组)
作用:测试字符串的长度(不包括′\0′).
⑦strlwr函数
形式:strlwr (字符数组)
作用:将字符串中大写字母换成小写字母。
⑧strupr函数
形式:strupr (字符数组)
作用:将字符串中小写字母换成大写字母。 后4个函数课后自学
例:有3个数,求其中最大数。
#include <stdio.h>
void main( )
{ int a,b,c,max; //定义三个字符数组存放三个字符串,max数组存放最大字符串
scanf(″%d,%d,%d″,&a,&b,&c);
if(a>b) max=a; else max=b;
if(c>max)max=c;
printf(″最大数为:\n″,max);
}
例:有3个字符串,求其中最大字符串。
char a[10],b[10],c[10],max[10]; 定义三个字符数组存放三个字符串,max数组存放最大字符串
gets(a); gets(b); gets(c); 分别输入三个字符串
if (strcmp(a,b)>0) strcpy(max,a); a数组中字符串和b数组中字符串比较
else strcpy(max,b); 较大的字符串用max数组存放
if (strcmp(c,max)>0) strcpy(max,c); 将c数组中字符串和max数组字符串比较
puts (max); max存放最大字符串,输出
演示最大字符串.cpp。
思考:用一个二维字符数组存放三个字符串
char s[3][10];
for (i=0;i<3;i++)
gets (s[i]);
如何进行比较,求最大的字符串?
字符串是存放在字符数组中的。引用一个字符串,可以用以下两种方法。
(1) 用字符数组存放一个字符串,可以通过数组名和格式声明“%s”输出该字符串,也可以通过数组名和下标引用字符串中一个字符。
(2) 用字符指针变量指向一个字符串常量,通过字符指针变量引用字符串常量。
1.利用字符数组处理字符串应用
例:定义一个字符数组,在其中存放字符串“I love China!”,输出该字符串和第8个字符。
#include <stdio.h>
int main()
{ char string[]=“I love China!”;
printf(“%s\n”,string);
printf(“%c\n”,string[7]);
return 0;
}
2.指向字符的指针变量处理字符串
可以不定义字符数组,而定义一个指向字符的指针变量,并将字符串的起始地址赋给指针变量,通过该指针变量亦可以实现字符串的操作。
例:通过字符指针变量输出一个字符串。
#include <stdio.h>
int main()
{ char *string=“I love China!”;
printf(“%s\n”,string);
return 0;
}
用指向字符的指针变量处理字符串与用字符数组处理字符串的许多操作都类似,但也有许多不同之处。主要区别有:
(1) 在用字符数组处理字符串时,可以认为是将整个字符串的内容赋给了字符数组;但在用指向字符的指针变量处理字符串时,就不能认为是将整个字符串的内容赋给了指向字符的指针变量,而只是将字符串常量的指针赋给了该指针变量。
(2) 数组名是指针常量,不能重新被赋值;而指向字符串的指针变量是可以被重新赋值的,即可以使指针变量重新指向其他字符。
(3) 要想将字符串常量直接赋给字符数组,只能通过初始化的方式实现,否则就只能将字符串常量每个字符逐个赋给字符数组的每个元素。
例:将字符串a复制为字符串b,用指针变量来处理。
解题思路:定义两个指针变量p1和p2,分别指向字符数组a和b。改变指针变量p1和p2的值,使它们顺序指向数组中的各元素,进行对应元素的复制。
参选代码:
#include<stdio.h>
intmain()
{chara[]="I am a boy.",b[20],*p1,*p2;
p1=a; p2=b;
for( ; *p1!=‘\0’;p1++,p2++)
*p2=*p1;
*p2=‘\0’;
printf(“stringa is:%s\n”,a);
printf(“stringb is:%s\n”,b);
return 0;
}
如果想把一个字符串从一个函数“传递”到另一个函数,可以用地址传递的办法,即用字符数组名作参数,也可以用字符指针变量作参数。
在被调用的函数中可以改变字符串的内容,在主调函数中可以引用改变后的字符串。
例:用函数调用实现字符串的复制。
解题思路:定义一个函数copy_string用来实现字符串复制的功能,在主函数中调用此函数,函数的形参和实参可以分别用字符数组名或字符指针变量。分别编程,分析比较。
(1) 用字符数组名作为函数参数
#include <stdio.h>
int main()
{void copy_string(char from[],char to[]);
char a[]="I am a teacher.";
char b[]="you are a student.";
printf(“a=%s\nb=%s\n",a,b);
printf("copy string a to string b:\n");
copy_string(a,b);
printf(“a=%s\nb=%s\n",a,b);
return 0;
}
void copy_string(char from[], char to[])
{ int i=0;
while(from[i]!='\0')
{ to[i]=from[i];
i++;
}
to[i]='\0';
}
(2)用字符指针变量作形参
void copy_string(char *from, char *to)
{ for( ;*from!='\0'; from++,to++)
{ *to=*from; }
*to='\0';
}
练习:
写一函数,将字符串1中从第m个字符开始的全部字符复制到另一字符串中。在主函数调用该函数,并输出复制后的字符串。
分别在程序中按以下两种情况处理:
(1)函数形参用数组名。
(2)函数形参用指针变量。

