程序设计基础 杨圣洪 13007432216 ( since 1998.12) 群号:81968986 QQ: 2264454709 ysh@hnu.edu.cn kczx.hnu.cn 请访问
第1讲 数组---一维数组-字符数组 (1)什么字符数组? 第1讲 数组---一维数组-字符数组 (1)什么字符数组? 同类型的一组数,类型为char,实际是整数,以前介绍的整数样例在字符数组仍然可以使用。 (2)如何建立字符数组?如何给字符数组赋值 char a[]={‘a’,’b’,’c’,’d’,’e’}; // arrchar1.c 可测长度 char a[N]={‘a’,’b’,’c’,’d’,’e’}; // arrchar2.c N=20(最大长) // 如何测实际长度? char3 char a[N] for(i=0;i<N;i++) {scanf("%c",&a[i]);} //char4 char c[N] for(i=0;i<N;i++) {c[i]=rand()%127;} //char5 3、如何使用数组?换个秩序显示出来 顺序/逆序显示,//char5 求最大值最小值及均值等 //char6.c
第1讲 数组---一维数组 5、如何找出某个元素的值?char7 如何修改一个元素的值?char8 ,给旧值与新 第1讲 数组---一维数组 5、如何找出某个元素的值?char7 如何修改一个元素的值?char8 ,给旧值与新 如何删除一个元素?Char9,char10 前移核码 如何增加一个元素?Char11,char12 后移核码 前后对调即逆置?先实例,j=0—n/2 k来, char13 如何判断它是回文数组?对应位置相同 char14 冒泡排序?前冒,后冒? Char15,char16 选择排序?插入一个元素到排好序的数组中 排序方法总搜索,写个小报告在班上宣读,班级可搞场排序方法的主题班会,每个小组一个方法,评分方法:听懂程度打分。
字符串处理函数—新例1 例 对于以下字符串,strlen(s)的值为: 字符串长度函数strlen strleny.c 格式:strlen(字符数组) 功能:计算字符串长度 返值:返回字符串实际长度,不包括‘\0’在内 例 对于以下字符串,strlen(s)的值为: (1)char s[10]={‘A’,‘\0’,‘B’,‘C’,‘\0’,‘D’}; (2)char s[ ]=“\t\v\\\0will\n”; (3)char s[ ]=“\x69\082\n”; char a[100]={‘a’,‘b’,‘c’,‘d’,‘e’},只有前5个。因字符数组也是整型数组,故95个空位置的值为原始值0,或字符‘\0’, 定义字符数组时,数组的长度必须将‘\0’考虑进来,如 char a[5]={‘a’,‘b’,‘c’,‘d’,‘e’} 时printf(“%s”,a)不能正常输出 需定义成char a[6]={'a','b','c','d','e'}或char a[7]={'a','b','c','d','e'}。 C语言的字符串以'\0'为结束标志,
字符串处理函数—新例2 char a[100]={‘a’,‘b’,‘c’,‘d’,‘e’},只有前5个 将输入字符函数getch(),getche(),getchar()改造成输入字符串的函数。 stringInput.c int inputBygetch(char a[],int n) int inputBygetchDisp(char a[],int n) int inputBygetche(char a[],int n) int inputBygetchar(char a[],int n)
字符串处理函数—新例3 字符串连接函数strcat concaty.c 格式:char *strcat(字符数组1,字符数组2) 功能:把字符数组2连到字符数组1后面 返值:返回字符数组1的首地址 说明:字符数组1必须足够大 连接前,两串均以‘\0’结束; 连接后,串1的‘\0’取消,新串最后加‘\0’ 函数值与字符数组1中,最后都是连接后的内容 自定义函数时: 测出数组1的长度存于aLen中, 数组2的字符i,存于数组1的aLen+I 返回数组2的首地址
字符串处理函数—新例4 字符串拷贝函数strcpy strcpy.c 格式:char * strcpy(字符数组1,字符串2) 功能:将字符串2,拷贝到字符数组1中去 返值:返回字符数组1的首地址 说明:字符数组1必须足够大 拷贝时‘\0’一同拷贝 不能使用赋值语句为一个字符数组赋值 自定义时: 依次将字符串2的每个字符写到数组1中,同时返回数组1的首地址。
字符串处理函数—新例5 字符串比较函数strcmp strcmpy.c 格式:strcmp(字符串1,字符串2) 功能:比较两个字符串 比较:对两串从左向右逐个字符比较(ASCII码), 直到遇到不同字符或‘\0’为止 返值:返回int型整数, a. 若字符串1< 字符串2, 返回负整数 b. 若字符串1> 字符串2, 返回正整数 c. 若字符串1== 字符串2, 返回零 说明:字符串比较不能用“==”,必须用strcmp 自定义时: 从字符0到最后字符’\0’进行比较, 如果字符i不相等则分出高低,结束比较 如果一个数组字符用完了,则未用完的大
字符串处理函数—新例6 大小写字母转换函数 strupy.c 格式: 小写转大写strupr(name) 大写转小写strlwr(name) 功能: 说明:name为字符串数组名 自定义时: 如果是小写字母,则将其asci码-32变大写,仍写回到数组中。 如果是大写字母,则将其asci码+32变小写,仍写回到数组中。
字符串处理函数—新例7 字符串中找特定字符strchr strchrstr.c 格式:char *strcr(字符串a,字符c) 功能:判断c是否在a中出现 返值:返回char *字符串,函数值为“名前有*”的形式,则接受者也是“名前有*” 若字符c在字符串a中出现,则返回出现位置起到最后的字符, 若没有出现则返回长度为的字符串即空串 自定义时: 稍有变化,找到指定字符时,返回其所在的位置,没有找到值为-1
字符串处理函数—新例7 字符串中找特定字符函数strstr strchrstr.c 格式:char *strstr(字符串a,字符b) 功能:判断b是否在a中出现 返值:返回char *字符串,函数值为“名前有*”的形式,则接受者也是“名前有*” 若字符b在字符串a中出现,则返回出现位置起到最后的字符, 若没有出现则返回长度为的字符串即空串 自定义时: 测出子串的长度存于lensub, 让a[i]~a[i+lensub]与b[]进行比较,i=0~lena-lensub 一段一段的比较
第1讲 数组----字符数组 【练习1】统计从键盘输入的字符串中字母、数字和其他字符的个数,并输出统计后的结果。 分析:1、 字符串输入str[100]中, gets(str); 2、字符数组中元素的比较 str[i]>=65 && strp[i]<65+26 str[i]>=97 && strp[i]<97+26 str[i]>='0' && strp[i]<='9' 3、输出结果 。可参考统计不及格人数的例题 【练习2】在一字符数组中查找某个字符,找到了,将其删除,若没找到,则输出NO FIND!!! 参考strchrstr.c中的代码进行查找,参考前几周删除数组元素的代码,删除字符。
第1讲 数组----字符数组 【练习3】空格的ASCII码为32,请编写函数void ltrimy(char a[],char b[]),请将b复制给a,但不将b字符串前面的空格复制到a中。如b=" abcde",复制后a="abcde" 提示:复制前判断了b[i]?=32,若不是复制过去,j表示a[j]当前位置 【练习4】空格的ASCII码为32,请编写函数void rtrimy(char a[],char b[]),请将b复制给a,但不将b字符串尾部的空格复制到a中。如b="abcde ",复制后a="abcde" 【练习5】空格的ASCII码为32,请编写函数void trimy(char a[],char b[]),请将b复制给a,但不将b字符串的空格复制到a中。如b=" ab cde ",复制后a="abcde" 【练习6】请编写函数void trimya(char a[],char b[],char c),请将b复制给a,但不将b字符串的指定字符复制到a中。如b="===b=cde==",c='=',复制后a="abcde"
【例1-5】简单密码检测程序 从键盘输入一串字符,与原密码比较,若不一致, 显示“口令错误,按任意键继续!”,可以比较3次,3次都不正确,退出程序,否则开始执行后面的程序 #include "stdio.h" main( ) { char pass_str[80]; /*定义字符数组passstr*/ int i=0; /*以下为检验密码*/ while(1) { printf ("请输入密码\n"); gets (pass_str); /*输入密码*/ if (strcmp(pass_str,“password”)!=0) printf("口令错误,按任意键继续"); else break; /*密码输入正确,中止循环*/ getch( ); i++; if(i==3) exit(0); /*密码输入第三次错误,退出程序*/ } /*输入正确密码所进入的程序段*/ }
程序运行的结果:??? #include <string.h> #include <stdio.h> main() { char str1[] = ”Hello!", str2[] = ”How are you?”,str[20]; int len1,len2,len3; len1=strlen(str1); len2=strlen(str2); if(strcmp(str1, str2)>0) { strcpy(str,str1); strcat(str,str2); } else if (strcmp(str1, str2)<0) { strcpy(str,str2); strcat(str,str1); } else strcpy(str,str1); len3=strlen(str); puts(str); printf(”Len1=%d,Len2=%d,Len3=%d\n”,len1,len2,len3); } 程序运行的结果:???