名师名校精品课件【全国计算机等级考试二级课程-C语言程序设计 】C6_3

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
c[0] I c[1] 空 格 c[2] L c[3] i c[4] k c[5] e c[6] 空 格 c[7] C c[8] \0 c[9] \0
ห้องสมุดไป่ตู้
字符数组存储示意图 未初始化或赋初值的数组元素值不确定: char a[5]; a[0]=„c‟; a[1]=„d‟; 可在数组最后赋值’\0‟用来结束字符数据的处理: a[2]=„\0‟ ; // 或初始化数组 char a[5]={„c‟, „d‟}; 对全体元素赋初值时可省去长度说明: char c[ ]={„I‟, „ ‟, „L‟, „I‟, „k‟, „e‟, „ ‟, „C‟}; // char c[8] //存放字符串”I Like C”
s为字符数组名或字符串中某个字符的地址
char s[40]; gets(s); 注: 可输入包括空格、Tab的字符串
上一张 下一张
3. 字符串输出函数puts( )
格式:puts(s); 功能:输出内存中从地址s起的若干字符至’\0‟, 并将’\0‟转换为换行符输出。 char s[8]="Welcome"; puts(s); //输出:Welcome↙ printf ("%s", s); //输出:Welcome
//char a[8],存放的字符串为”abc”
char c[5]; c=“Like”; //×数组名是地址常量,不能将字符串直接赋给数组名
上一张 下一张
6.3.2 字符串的输入、输出
【例6.13】输入一行字符,将其中的小写字母转换为 大写字母后输出。
#include <stdio.h> void main() { char c[81]; scanf(“%s”, c); int i; for (i=0; (c[i]=getchar())!=„\n‟; i++) ; //逐个字符输入 c[i]=„\0‟; for (i=0; c[i]!= „\0‟; i++) { if (c[i]>=„a‟&&c[i]<=„z‟) c[i]-=32; printf("%c",c[i]); // putchar(c[i]); }
上一张 下一张
2. 字符串和字符数组
字符串-用双引号” ”括起来的以’\0‟结束的字符序列。 每个字符串常量有一个字符串结束标志’\0‟隐藏在串最 后(由系统自动添加),标志该串结束。 可用字符数组来存放一个字符串(无字符串变量)。
字符串:”A”
可以是空串” ” 汉字相当于2个字符
字符:’a‟
有且仅有一个字符
上一张 下一张
2. 字符串和字符数组
可用字符串初始化字符数组(数组长度可缺省): char c[5]={“Like”};
// 数组长度须比字符串元素个数多1,以存放’\0‟
char c[]=“Like”;
//char c[5]; strlen(c)得字符串长度为4(不包括’\0‟)
char a[]=“abc\0xyz”;
上一张 下一张
Review-字符串与字符数组 • 定义、初始化:
char c[5]={„L‟,‟i‟,‟k‟,‟e‟,‟\0‟}; char a[3]; a[0]=„N ‟; //其它元素值不确定 char c[5]={"Like"}; char c[5]="Like";√ char c[5]; c="Like"; × • 逐个字符的输入/输出:getchar、putchar (scanf、printf的格式符%c) char c[81]; int i; for(i=0; (c[i]=getchar()) != „\n‟; i++) ; // 输入字符串 • 整个字符串的输入/输出:scanf、printf的格式符%s char c[20]; scanf(“%s”,c); // 回车,Tab,空格 结束输入 printf(“String is %s”,c);
下一张
整个字符串的输入、输出-格式控制
char c[20]=“Hello!”; printf(“%8s \n”, c); //指定宽度8输出字符串
// >实际宽度时左边补空格,<实际宽度时无效 printf(“%-8s \n”, c); //右边补空格 printf(“%.3s \n”, c); //指定只输出字符串的前3个字符
或数组元素地址),系统自动在串尾加’\0‟
for (i=0; c[i]!= „\0‟; i++) { for (i=0;i<81; i++) if (c[i]>=„a‟&&c[i]<=„z‟) c[i]-=32; printf(“%s", c); } 字符串尾有′\0′作为串结束符,则可把字符串作为一个整体看待, 用字符数组名对一个字符串进行整体的输入、输出; 而数值型数组不能用数组名输入、输出其全部元素。 上一张
• 字符串输入/输出函数:
gets(str); // 回车结束输入 puts(str); //输出包含↙
上一张 下一张
【例6.14】输入一串字符,将其逆序存放并输出。 分析:”xyz123”
s[0] s[1] s[2] … s[5]
上一张
下一张
【例6.14】输入一串字符,将其逆序存放并输出。 #include <stdio.h> void main() { char s[81], t; for (j=0; (s[j]=getchar())!=„\n‟; j++) ; int i, j; gets(s); for (j=0; s[j]!=„\0‟; j++) ; // 字符串长度 j=strlen(s); for (i=0, j--; i<j; i++, j--) { t=s[i]; s[i]=s[j]; s[j]=t; } printf("%s", s); }
上一张 下一张
【例6.14】输入一串字符,将其逆序存放并输出。 #include <stdio.h> #include <string.h> void main() { char s[81], t; int i, j; for (i=0; i<j; i++) … gets(s); for (j=0; s[j]!=„\0‟; j++) ; for (i=0, j--; i<j; i++, j--) { for (i=0; i<j/2; i++){ t=s[i]; s[i]=s[j]; s[j]=t; t=s[i]; s[i]=s[j-i-1]; s[j-i-1]=t;} } printf("%s", s); 上一张 下一张 }
printf(“%s”, c);
上一张 下一张
1.整个字符串的输入、输出
#include <stdio.h> void main() { char c[81]; int i; scanf(“%s”, c); //&c[0], 参数为数组名(数组起始地址
用%s输入字符串, 遇空格、Tab、回车 则输入结束
char s1[40]=“Hangzhou ”, s2[20]=“China”; strcat(s1, s2); puts(s1); // ”Hangzhou China” 字符数组str1需定义得足够大
上一张 下一张
2. 字符串拷贝函数strcpy()
strcpy(str1,str2); 功 能 : 把 字 符 数 组 ( 或 字 符 串 常 量 )str2 中 的 字 符 串 包 括’\0‟复制到字符数组str1中。 char s1[40]=“Hangzhou ”, s2[20]=“China”; strcpy(s1, s2); //China„\0‟ ou
补充: 常用字符串函数用法(P.198 8.3.3)
#include <string.h > 1. 字符串连接函数 strcat(str1, str2 ); 功能:把字符数组 ( 或字符串常量 )str2中的字符串包括’ \0‟ 连接到 字符数组 str1后,并删去 str1后的串结束标志’ \0‟ 。函数返回值 为str1。
6.3 字符串和字符数组
1. 字符数组的定义
用来存放字符型数据的数组,其每一元素可存放一个字符
定义形式: char c[10]; char c[5][10];
//定义二维字符数组
下一张
字符数组允许在定义时进行初始化: char c[10]={„I‟, „ ‟, „L‟, „I‟, „k‟, „e‟, „ ‟, „C‟}; //其余元素为’\0‟ 赋值后各元素的值( „\0‟是ASCII码为0的字符) :
\118?
char a[16]=“China”; printf(“%d”,strlen(a)); printf(“%d”,strlen(a+2));
// 3,从地址a+2到’\0‟间字符数
上一张 下一张
#include <stdio.h> 【程序说明】* #include < (9) > 输入一个以回车结束的字符串(少于80个 main( ) 字符),判断该字符串是否对称。判断时 { int flag, i, k, length; 只考虑字符串中的英文字母和数字字符,不 char str[80]; 区分大小写字母。 printf("Enter a string: "); gets(str); 运行示例1: i = k = 0; Enter a string: Madam I'm Adam while(str[i] != '\0'){ Yes if(isupper(str[i])) str[i]=tolower(str[i]); 运行示例2: if(isdigit(str[i])||isalpha(str[i])){ Enter a string: elephant (10) No k++;
【例6.15】输入一个数字字符串,将其转换为整数输出 允许输入的第一个字符 #include <stdio.h> 是’+‟, „-‟或数字字符? void main() { int flag=1; char a[12]; if (s[i]==„+‟) flag=1; int m=0, i, d; else if (s[i]==„-‟) flag=-1; gets(s); else … for (j=0; s[j]!=„\0‟; j++) if (s[i]>=„0‟&&s[i]<=„9‟) { d=s[i]-‟0‟; m=m*10+d; } else break; 上一张 下一张 m*flag printf(“integer=%d\n", m); }
Hello! Hello! Hel
上一张 下一张
1.整个字符串的输入、输出
【例6.13】输入一行字符,将其中的小写字母转换为 大写字母后输出。 #include <stdio.h> void main() { char c[81]; int i; gets(c); scanf(“%s”, c);
//用%s输入字符串,遇空格、Tab、回车则输入结束
s1=“China”; ×
puts(s1);
字符串赋值给字符数组方法: 初始化、gets, scanf(“%s”, …) 、strcpy()
上一张 下一张
3. 字符串比较函数strcmp()
strcmp(str1, str2) 功能:按ASCII码顺序逐一比较两个数组中的字符串, 直到出现不同字符或遇到’\0‟,返回比较结果。 字符串s1=s2,返回零; s1>s2,返回1; s1<s2,返回-1。 printf("%d", strcmp("BOY", "BLUE")); printf("%d", strcmp("a", "ab")); printf("%d", strcmp("AC", "AC")); 空格 < 0~9 < A~Z < a~z // 1, -1, 0
}
for (i=0; c[i]!= „\0‟; i++) { if (c[i]>=„a‟&&c[i]<=„z‟) c[i]-=32; printf(“string is %s", c); puts(c);
上一张 下一张
2. 字符串输入函数gets( )
格式:gets(s); 功能:读入一串以回车结束的字符并后缀’\0‟, 到s为首地址的内存单元。
上一张 下一张
4. 求字符串长度函数strlen()
strlen(str) 功能:计算字符串的长度 (不含’\0‟),作为函数值返 回。 printf(“%d”,strlen(“BOY”)); printf(“%d”,strlen(“C语言”)); printf(“%d”,strlen(“ab\110\\cd\‟\\ne”)); // 3, 5, 10
相关文档
最新文档