- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
t=ch[i]; ch[i]=ch[j]; ch[j]=t; } puts(ch); /*显示字符串 */ }
下一页
12.5 程序举例
[例1] 统计输入字符串中字符“Fra Baidu bibliotek”出现的次数.
#include <stdio.h>
#include<string.h>
int main()
{
char str[100];
下一页
12.4 字符串处理函数
(5) strcmp(str1, str2); /* 字串比较 string compare*/ 比较str1和str2,若两者相同,返回函数值为0;若str1大
于str2,返回函数值为一个正整数; 若str1小于str2, 返回 函数值为一个负整数。 说明:
对两个字符串自左至右逐个字符比较(按ASCII码值大小 比较),知道出现不同的字符或遇到“\0”为止。如果,全部 字符相同,则认为相等;如果出现不相同的字符,则以第一 个不相同的字符为依据确定字符串的大小。
下一页
12.4 字符串处理函数
(6) strlen(str); /* 字符串长度 string length*/
函数值为字符串实际长度,不包括“\0” 。
例如:
char s[6]="CHINA";
char str[]=“China”; printf("%s",strlwr(s)); //正确
printf(“%d”,strlen(str)); 输出结果5
字符串结束标 志(自动加上)
而
char str[ ]={‘p’,‘r’,‘o’,‘g’,‘r’,‘a’,‘m’}; 占内存7个字节。
C语言的字符串称又0字符串,即最后一元素值为0的字符数组。
下一页
12.3 字符串的输入和输出
调用scanf函数时,空格和换行符都作为字符串的分隔符而不 能读入。gets函数读入由终端键盘输入的字符(包括空格符),直 至读入换行符为止,但换行符并不作为串的一部分存入。
输入数据:How are you 输入数据后str1, str2, str3 数组状态如下图:
str1 H o w \0 str2 a r e \0 str3 y o u \0
★数组名具有双重功能,除了表示名称外,还表示该数组的首 地址,所以用scanf函数不用在前面加“&”;字符串只能在变 量定义时初始化,不能在程序语句中赋值。
int n=0, i=0;
gets(str); /*等待用户从键盘输入一个字符串 */ while(str[i]!=0) /* 统计’x’在str中出现的次数*/
{ if(str[i++]==‘x’) n++;
}
if(str[i]==‘x’) n++; i++;
printf (“字符x出现的次数是 %d\n",n);
下一页
12.4 字符串处理函数
(4) strcpy(str1,str2);/* 字符串拷贝 string copy*/ 将str2复制到str1中,实际上完成字符串的赋值操作。
说明:
(1) str1必须足够大; (2) 复制时连同字符串后面的“\0”一起复制到str1中; (3) 不能用赋值语句将一个字符串常量或字符数组直接赋值给一个 字符数组。例如:
从终端输入一个字符串到字符数组,并返回字符数组的起 始地址。 注意:如果输入字符串有空格,则必须用gets而不能用scanf !
下一页
12.4 字符串处理函数
(3) strcat(str1, str2);/*字符串合并函数 string coalition */ 把str2连接到 str1的后面,结果放在str1中,函数返回值为
#include<stdio.h> main() {
int i; char str[10]; scanf (“%s”,str);
str为字符数组名,代表该数组的起 始地址。
输入时,系统自动在每个字符串后 加入结束符‘\0’。
若同时输入多个字符串,则以空格 或回车符分隔。
printf (“%s\n”,str);
第十二讲、 字符数组与字符串处理函数
教学目的
1、掌握字符数组的定义、初始化、引用 2、掌握字符数组的输入与输出 3、掌握字符串处理函数
下一页
教学内容
1、字符数组的定义和使用 2、字符数组的初始化 3、字符串的输入和输出 4、字符串处理函数 5、程序举例
下一页
教材分析
教学重点: 字符数组的输入与输出 字符串处理的算法
下一页
12.2 字符数组的初始化
2、用字符的ASCII码值对字符数组 进行初始化(了解)
例如:
char str[8]={112,114,111,103,114,97,109,0};
3、用字符串(用双引号括着的字符序列)对字符数组进行初始化
例如: char str [ ]=“program”;
该方式赋予数组8个字符, 最后一个为“\0”,
str[0]=‘ ’, str[1]=‘p’, str[2]=‘r’, str[3]=‘o’, str[4]=‘g’, str[5]=‘r’, str[6]=‘a’, str[7]=‘m’ 说明: 如果只给数组的一部分字符元素初始化,没有指定初值的元 素默认初值为空字符(ASCII码为0的字符)。注意,空字符与空 格字符(ASCII码32)不同。
printf(“排序结果 :\n"); for(i=0;i<5;i++) printf("%s\n",str[i]); }
下一页
小结
1、字符串的结束标记’\0’ 2、字符串的输入与输出: gets()、puts() 3、字符串处理函数:
strcat(), strcpy(), strcmp(), strlen() strlwr(), strupr()
教学难点: 字符串处理函数 字符串处理的算法
12.1 字符数组的定义和使用
字符数组定义的一般形式:
char 数组名[数组长度]; 例如:
在TurboC中 10个整数占20
个字节
char c[10]; 说明:
10个元素 占10个字
节
字符型和整型是通用的,因此定义也可改为 int c[10];
但应注意它们占用的存储空间不同。
for(j=i+1;j<5;j++) /* 以字符数组str[i]为擂台 */ if( strcmp(str[i], str[j])>0 ) /*小者交换于str[i] */ { strcpy(temp,str[i]); strcpy(str[i],str[j]); strcpy(str[j],temp); }
str[i]=getchar();
for (i=0;i<9;i++)
scanf ("%c",&str[i]); str[i]='\0';
putchar(str[i]);
for (i=0;i<9;i++)
printf ("%c",str[i]);
}
下一页
12.3 字符串的输入和输出
2、 字符串整体输入/输出 (1) 在标准输入/输出函数printf和scanf中使用%s格式描述符 P127 【例6-24】 字符串整体输入/输出
}
下一页
12.5 程序举例
[例2] 从键盘输入N个字符串(每个字符串不超过80个字符),然 后把它们按由小到大的顺序排列并输出。
#define N 5 #include<stdio.h> #include<string.h> void main() {
int i; char str[N][80], temp[80]; for(i=0;i<N;i++) gets(str[i]); /* 等待从键盘输入字符串 */ for(i=0;i<N-1;i++) /* 用比较交换法排序 */
str1=“China”;str1=str2; 是不合法的; (4) str1必须是数组名,str2可以是字符数组名,也可以是字符串常量。 例如:
char str1[20]; char str2[]=“China”; 则, strcpy(str1,str2) 与 strcpy(str1,“China”) 作用相同。
下一页
把str中小写字母转换成大写字母 , 并存入str。str必须 为字符数组,不能是字符串常量。
下一页
12.4 字符串处理函数
P130【例6-26】. 将字符数组中的字符串按逆序存放后输出
#include<stdio.h> #include<string.h> main() {
int i,j; char t,ch[80]; gets(ch); /*等待用户从键盘输入一个字符串 */ puts(ch); /*显示字符串 */ for(i=0, j=strlen(ch)-1; i<j; i++, j--) /*字符串逆序处理 */ {
printf (“%6s\n”,str); /*字符串多于6个, 全部输出*/
printf (“%-.6s\n”,str); /*只输出前6个字符,多余不输*/
}
下一页
12.3 字符串的输入和输出
例如 char str1[5], str2[5], str3[5]; scanf (“%s%s%s”, str1, str2, str3);
下一页
12.4 字符串处理函数
字符串处理函数为库函数,在程序开头应加预编译命令 #include<string.h> 以下函数参数中的str, str1, str2均为字符数组名。 (1)puts(str);/*字符串输出函数 put string*/
输出指定字符串。 参数可以为字符串常量。输出的字符 串可以包含转义字符。 (2) gets(str);/*字符串输入函数 get string */
实际应用中,可以用无符号整型数组来代替字符数组。
例如:
unsigned int c[10];可以代替 int c[10];
12.2 字符数组的初始化
1、 用字符常量对字符数组进行初始化 例如:
char str [8]={‘ ’,‘p’,‘r’,‘o’,‘g’,‘r’,‘a’,‘m’} 或:
char str [ ]={‘ ’,‘p’,‘r’,‘o’,‘g’,‘r’,‘a’,‘m’} 或:
str1地址. 例如:char str1[30]=“People’s Republic of ”; char str2[]=“China”; printf(“%s”, strcat(str1,str2) ); 输出结果: People’s Republic of China
说明:str1必须足够大,连接前两个字符串后面都有一个“\0”, 连接时取消str1后面的“\0”,只在新串最后保留一个“\0”。
1、 逐个字符输入/输出 (1)在标准输入/输出函数printf和scanf中使用%c格式描述符 (2)使用getchar和putchar函数。
下一页
12.3 字符串的输入和输出
P126 【例6-23】 逐个字符输入/输出
#include<stdio.h>
main( )
{ int i; char str[10];
printf("%s",strlwr("CHINA"));//错误 为什么 ?
(7) strlwr(str); /*字符串大写转小写 string lowercase*/
把str中的大写字母转换成小写字母,并存入str。str必 须为字符数组,不能是字符串常量。
(8) strupr(str); /*字符串小写转大写 string uppercase*/