C语言数组详细讲解.doc
如有侵权,请联系网站删除,仅供学习与交流C语言数组详细讲解【精品文档】第 6 页定义一维字符数组:用于存储和处理1个字符串,其定义格式与一维数值数组一样。char str20;二维字符数组:用于同时存储和处理多个字符串,其定义格式与二维数值数组一样。char country1020;country:第i个字符串二字符数组的初始化字符数组的初始化.1.可以通过为每个数组元素指定初值字符来实现。char str10= 'I',' ','a','m',' ',h,'a','p','p','y'char str ="I am happy" 可以省略花括号,如下所示char str ="I am happy"char country1020=“china”,”japanese”,;注意:上述这种字符数组的整体赋值只能在字符数组初始化时使用,不能用于字符数组的赋值,字符数组的赋值只能对其元素一一赋值,下面的赋值方法是错误的 char str15; str="I am happy"strcpy(str, "I am happy");不是用单个字符作为初值,而是用一个字符串(注意:字符串的两端是用双引号“”而不是单引号括起来的)作为初值。a “a”区别 三、字符数组的引用字符数组的逐个字符引用,与引用数值数组元素类似。 (1)字符数组的输入 除了可以通过初始化使字符数组各元素得到初值外,也可以使用getchar()或scanf()函数输入字符。 例如: char str10; for(i=0; i<10; i+) scanf("%c", &str); fflush(stdin); /*清除键盘输入缓冲区*/ (2)字符数组的输出 字符数组的输出,可以用putchar()或printf()函数。 例如: char str10="c language" for(i=0; i<10; i+) printf("%c", str); printf("n"); 注意:逐个字符输入、输出时,要指出元素的下标,而且使用“%c”格式符。另外,从键盘上输入字符时,无需输入字符的定界符单引号;输出时,系统也不输出字符的定界符。 字符数组的整体操作 案例 字符数组的整体输入与输出。 /*功能:将2维字符数组进行初始化,并在屏幕上输出*/ main() int i; char name59="张三山", "李四季", "王五魁", "刘六顺", "赵七巧" for(i=0;i<5;i+) printf("n%st",name); /*name代表该行数组元素的首地址*/ 1字符串及其结束标志 所谓字符串,是指若干有效字符的序列。C语言中的字符串,可以包括字母、数字、专用字符、转义字符等。 C语言规定:以0作为字符串结束标志(0代表ASCII码为0的字符,表示一个“空操作”,只起一个标志作用)。因此可以对字符数组采用另一种方式进行操作了字符数组的整体操作。 注意:由于系统在存储字符串常量时,会在串尾自动加上1个结束标志,所以无需人为地再加1个。 另外,由于结束标志也要在字符数组中占用一个元素的存储空间,因此在说明字符数组长度时,至少为字符串所需长度加1。 2字符数组的整体初始化 字符串设置了结束标志以后,对字符数组的初始化,就可以用字符串常量来初始化字符数组。 3字符数组的整体引用 (1)字符串的输入 除了可以通过初始化使字符数组各元素得到初值外,也可以使用scanf()函数输入字符串。 (2)字符串的输出 printf()函数,不仅可以逐个输出字符数组元素,还可以整体输出存放在字符数组中的字符串。 四、常用的字符串处理函数 字符串标准函数的原型在头文件string.h中。 1输入字符串gets()函数 (1)调用方式:gets(字符数组) (2)函数功能:从标准输入设备(stdin)键盘上,读取1个字符串(可以包含空格),并将其存储到字符数组中去。 (3)使用说明 1)gets()读取的字符串,其长度没有限制,编程者要保证字符数组有足够大的空间,存放输入的字符串。 2)该函数输入的字符串中允许包含空格,而scanf()函数不允许。 2输出字符串puts()函数 (1)调用方式:puts(字符数组) (2)函数功能:把字符数组中所存放的字符串,输出到标准输出设备中去,并用n取代字符串的结束标志0。所以用puts()函数输出字符串时,不要求另加换行符。 ( 3)使用说明 1)字符串中允许包含转义字符,输出时产生一个控制操作。 2)该函数一次只能输出一个字符串,而printf()函数也能用来输出字符串,且一次能输出多个。 3字符串比较strcmp()函数 (1)调用方式:int strcmp(字符串1 ,字符串2) 其中“字符串”可以是串常量,也可以是1维字符数组。 (2)函数功能:比较两个字符串的大小。 如果:字符串1=字符串2,函数返回值等于0; 字符串1<字符串2,函数返回值负整数; 字符串1>字符串2,函数返回值正整数。 (3)使用说明 1)如果一个字符串是另一个字符串从头开始的子串,则母串为大。 2)不能使用关系运算符“”来比较两个字符串,只能用strcmp() 函数来处理。 案例 gets函数和strcmp函数的应用。 /*功能:简单密码检测程序*/ #include "stdio.h" main() char pass_str80; /*定义字符数组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); /*输入三次错误的密码,退出程序*/ /*输入正确密码所进入的程序段*/ 4拷贝字符串strcpy()函数 (1)调用方式:strcpy(字符数组, 字符串) 其中“字符串”可以是串常量,也可以是字符数组。 (2)函数功能:将“字符串”完整地复制到“字符数组”中,字符数组中原有内容被覆盖。 (3)使用说明 1)字符数组必须定义得足够大,以便容纳复制过来的字符串。复制时,连同结束标志'0'一起复制。 2)不能用赋值运算符“”将一个字符串直接赋值给一个字符数组,只能用strcpy()函数来处理。Str=”Hello world!” 错误5连接字符串strcat()函数 (1)调用方式:strcat(字符数组, 字符串) (2)函数功能:把“字符串”连接到“字符数组”中的字符串尾端,并存储于“字符数组”中。“字符数组”中原来的结束标志,被“字符串”的第一个字符覆盖,而“字符串”在操作中未被修改。 (3)使用说明 1)由于没有边界检查,编程者要注意保证“字符数组”定义得足够大,以便容纳连接后的目标字符串;否则,会因长度不够而产生问题。 2)连接前两个字符串都有结束标志'0',连接后“字符数组”中存储的字符串的结束标志'0'被舍弃,只在目标串的最后保留一个'0'。 6求字符串长度strlen()函数(len是length的缩写) (1)调用方式:int strlen(字符串) (2)函数功能:求字符串(常量或字符数组)的实际长度(不包含结束标志)。 7将字符串中大写字母转换成小写strlwr()函数 (1)调用方式:strlwr(字符串) (2)函数功能:将字符串中的大写字母转换成小写,其它字符(包括小写字母和非字母字符)不转换。 8将字符串中小写字母转换成大写strupr()函数 (1)调用方式:strupr(字符串) (2)函数功能:将字符串中小写字母转换成大写,其它字符(包括大写字母和非字母字符)不转换。典型示例1、 以上函数功能自定义完成题目:写一个函数,求一个字符串的长度,在main函数中输入字符串,并输出其长度。main()int len;char str20;printf("please input a string:n");scanf("%s",str);len=length(str);printf("the string has %d characters.",len);int length(char p)int i=0;while(p!=0)+i;return i;“hello”2、字符串与整数问题(1)编写程序,将输入的数字字符串转换成一个相应的整数。如输入字符串为“1234”,得到整数-12341234 12343、求子串问题题目:计算字符串中子串出现的次数Str1:This is a book,that is a penStr2:isinclude "string.h"include "stdio.h"main() char str120,str220;int sum=0,i=0,j=0;printf("please input two stringsn");scanf("%s%s",str1,str2);while(str!='0')if(str=strj)while(str=strj&&strj!='0')p1+;p2+;elsei+;if(strj='0')sum+;j=0;printf("%d",sum);4.字符串排序输入10个长度不超过20的字符串,按字典顺序从小到大输出(1) 分析:数据存储 char country1020(2) 冒泡或选择排序均可(3) 交换两个字符串、字符串比较等函数的使用