教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 精品文档 > 互联网资料 >

13 《C语言程序设计》教案 第四章 数组(3)—字符数组和字符串

来源:网络收集 时间:2026-09-07
导读: 《C语言程序设计》课程教案表 格式:strcat(字符串 1,字符串 2) 功能: 连接两个字符串中的字符,把字符串 2 的字符连接到字符串 1 的字符后面,结果 放在字符串 1 中,函数调用后得到一个函数值——字符串 1 的起始地址。 例如: char str1[30]={“people′s

《C语言程序设计》课程教案表

格式:strcat(字符串 1,字符串 2) 功能: 连接两个字符串中的字符,把字符串 2 的字符连接到字符串 1 的字符后面,结果 放在字符串 1 中,函数调用后得到一个函数值——字符串 1 的起始地址。 例如: char str1[30]={“people′s republic of”}; char str2[]={“china”}; printf(“%s”,strcat(str1,str2) ); 输出:people′s republic of china 说明:1)字符串 1 必须足够大,以便能容纳连接后的新字符串。 2)连接前两个字符串后面都有一个 \0 ,连接时将字符串 1 后面的 \0 取消,只在 新串的最后保留一个 \0 。 思考:以下程序是正确的 char c; c= A + B ; 那么,下面的程序呢?char c[10];c=”A”+”B”;

是不正确的,必须用 strcat()函数来连接。 (4)字符串拷贝函数 strcpy 格式:strcpy(字符数组,字符串) 功能: 将字符串拷贝到字符数组中去。 例如: char str1[10] ,str2[]={“china”}; strcpy(str1,str2); /* 或 strcpy(str1,“china”); */ 执行后 str1 的内容为: china\0\0\0\0\0 说明: 1)字符数组必须足够大,以便能容纳被拷贝的字符串。 2)拷贝时连同字符串后面的 \0 一起拷贝到字符数组中。 3)不能用赋值语句将一个字符串常量或字符数组直接赋给一 个字符数组。 下面的用法是错误的:str1={“china”};str1=str2;而只能用拷贝函数 strcpy 处理。 用赋值语句只能将一个字符赋给一个字符型变量或字符数组元素。 如下面是合法的:char a[5] ,c1,c2;c1= A ;c2= B ;a[0]= c ;a[1]= h ;a[2]= i ;a [3]= n ;a[4]= a ; 4)可以用 strcpy 函数将字符串中前面若干个字符拷贝到字符数组中去。 例如:strcpy(str1,str2,2); 将 str2 中前面 2 个字符拷贝到 str1 中去,然后再加一个 \0 。 (5)字符串比较函数 格式:strcmp(字符串 1,字符串 2) 功能: 比较字符串 1 和字符串 2 的大小。 说明: 按照 ASCII 码值大小比较,将两个字符串自左至右逐个字符比较,直到出现不同的字 符或遇到 \0 为止。如果全部字符相同,则认为相等;如果出现不相同的字符,则以第一个 不相同字符的比较结果为准。 1.字符串 1==字符串 2,函数值=0; 2.字符串 1>字符串 2,函数值>0; 3.字符串 1<字符串 2,函数值<0。 两个字符串的比较,不能用以下形式 str1==str2 或 str1>str2 只能用 strcmp(str1,str2)>0 或==0 或<0 来判断 (6)测试字符串长度函数

格式:strlen(字符数组) 功能: 测试字符串长度,函数值为字符串中实际长度,不包括 \0 。例如: char str[10]={“china”}; printf(“%d”,strlen(str) ); 结果为: 5 (7)字符串小写函数 格式:strlwr(字符串) 功能: 将字符串中大写字母转换成小写字母。lwr 是 lowercase(小写)的缩写。 (8)字符串大写函数 格式:strupr(字符串) 功能:将字符串中小写字母转换成大写字母。upr 是 uppercase(大写)的缩写。 (9)字符数组程序举例 1)输入一个字符串,将其中的大写字母均变成小写字母。 # include <stdio.h> # include <string.h> main() { char s[40],c; int i=0; printf(“输入一个字串:”); gets(s); strlwr(s); printf(“输出转换后的字串:”); puts(s); } 2)从字符串中取出指定长度的子串。 #include <stdio.h> main() { char s1[40],s2[40]; int i=0,m; printf(“\n 输入要截取子串的母串:”); gets(s2); printf(“\n 输入要截取子串的长度:”); scanf(“%d”,&m); while(i<m) {s1[i]=s2[i];i++;} s1[i]

= ‘\0'; printf(“\n 输出所截取的子串:%s”,s1 ); } 3)某单位的工作证号码的最后一位是用来表示性别的,如:M 表示男,F 表示女。今输入 5 个人的工作证号码,请统计出其中的男女人数。 #include<stdio.h> #include<string.h>

main() { int a=0,b=0,i,n; char c,s[5] [10]; printf(“输入 5 个人的工作证号码:\n”); for(i=0;i<5;i++) {scanf(“%s”,s[i] ); n=strlen(s[i] ); c=s[i] [n-1]; if(c== m || c== M ) a++; else b++; } printf(“男生数为%d\n 女生数为%d\n”,a,b); } 4)有三个字符串,要求找出其中最大者 分析:有一个二维的字符数组 str[3][20],大小为 3×20。即有 3 行 20 列,每一行可以容纳 20 个字符。 str[0]:China\0 str[1]:Japan\0 str[2]:India\0 可以把 str[0] ,str[1] ,str[2]看做三个一维字符数组,它们各有 20 个元素。把它们 如同一维数组那样进行处理。可以用 gets 函数分别读入三个字符串。经过二次比较,就可 得到值最大者,把它放在一维字符数组 string 中。 #include<stdio.h> #include<string.h> main() { char string[20] ,str[3] [20]; int i; for(i=0;i<3;i++) gets(str[i] ); /* 输入 3 个字符串 */ 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 the largest string is: %s\n”,string); } 3、指针与数组(35 分钟) 在 C 语言中,指针和数组的关系非常密切,引用数组元素既可以通过下标,也可以通

过指针来进行。正确地使用数组的指针来处理数组元素,能够产生高质量的目标代码。 (1)数组的指针和指向数组的指针变量 1)指向一维数组的指针 C 语言中,数组名代表该数组的首地址,即数组中第一个元素的地址。将一维数组的名 字或某个数组元素的地址赋给指针变量,指针变量即指向该一维数组或数组元素。 例如:int a[10] ,*p; p=a; /*把数组的起始地址赋给指针变量 p */ p=&a[0];把 a[0]元素的地址赋给指针变量 p。因为 a[0]是数组第 1 个元素, 指向数组的指针示意图如图 6-6 所示。

在定义指针变量时也可以赋初值,如: int a[10]; int *p=&a[0];或:int *p=a; (2)通过指针引用一维数组 我们知道,p=a;和 p=&a[0];是等价的,它们都是把数组 a 的起始地址赋给指针变量 p。 同理:p=a+i;和 p=&a[i];也是等价的。是把数组 a 中第 i 个元素 a[i]的地址赋给指针变 量 p。 设有以下语句: int a[10] ,*p; p=a; 把 p 置为指向数组 a 的第 1 个元素,即 p 包含了 a[0]的地址。*p 为 a[0]的值。 如果指针 p+1,则指向

a 的下一个元素,如图 6-7 所示。 图 6-7 指针引用一维数组元 素 根据以上所述,引用一维数 组元素,可以用两种方法: ①下标法, 如 a[i]或 p[i]形式; ②指针法,如 * ( a+i )或 * (p+i) 。 所以有: (1)p+i 和 a+i 就是 a[i]的地址,或者说,它们指向 a 数组的第 i 个元素(2)* (p+i)或*(a+i)就是 p+i 或 a+i 所指向的数组元素,即 a[i] 。例如:

*(p+5)或*(a+5)就是 a[5] 。 3)指向数组的指针变量也可以带下标,如 p[i]与*(p+i)等价。 例:用三种方法输出 a 数组的 10 个元素的值。 方法一:用下标法 main() { int a[10]={1,2,3,4,5,6,7,8,9,10}; int i; for(i=0;i<10;i++) printf(″%d ″,a[i] ); } 运行结果: 1 2 3 4 5 6 7 8 9 10 方法二: 用数组名 main() { int a[10]={1,2,3,4,5,6,7,8,9,10}; int i; for(i=0;i<10;i++) printf(″%d ″,*(a+i) ); } 运行结果: 1 2 3 4 5 6 7 8 9 10 方法三: 用指针法 main() { int a[10]; int i,*p; for(i=0;i<10;i++) scanf(″%d″,&a[i] ); for(p=a;p<(a+10);p++) printf(″%d ″,*p); } 运行结果: 1 2 3 4 5 6 7 8 9 10 三种方法比较:以上方法(1)与(2)相同。因为系统把 a[i]按*(a+i …… 此处隐藏:6450字,全部文档内容请下载后查看。喜欢就下载吧 ……

13 《C语言程序设计》教案 第四章 数组(3)—字符数组和字符串.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/wendang/1934052.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)