一、实验目的
(一)掌握字符数组的定义、初始化和应用;
(二)掌握字符串处理函数的使用。
二、预习要求
重点预习的内容:C语言中字符串的存储表示;字符数组输入输出的方法;常用的字符串处理函数的使用。
三、实验内容
(一)输入下面的程序并运行,观察程序运行的结果,并分析原因(注意程序第2行中有些单引号之间是空格)。
1. /* c8-1.c 字符数组的输出*/ 2. #include "stdio.h" 3. void main( ) 4. { char a[10]={ ’I’, ’ ’, ’a’, ’m’, ’ ’, ’a’, ’ ’, ’b’, ’o’, ’y’}; 5. printf("%s\n",a); 6. }
将字符数组a的大小改为11,再运行程序,并将结果与修改前的结果进行比较,分析原因。
(二)下面程序的功能是实现将两个字符串连接起来并输出结果,注意不使用strcat函数。
编程提示:
1.定义两个一维字符型数组str1、str2和两个循环变量。
2.为两个字符数组输入两个字符串(可使用scanf函数或gets函数整体赋值,要注意scanf和gets函数的区别,在对字符串赋值时,scanf函数不能出现空格)。
3.确定字符数组str1结束的位置。
4.再将字符数组str2中的内容连接到字符数组str1的后面。
5.为字符数组str1赋字符串结束的标志’\0’。
6.输出连接后的字符数组str1。
1. /* c8-3.c 字符串连接*/ 2. #include "stdio.h" 3. void main( ) 4. { char str1[100],str2[100]; 5. int i=0,j=0; 6. printf("please input the string1:"); 7. scanf("%s",str1); 8. printf("please input the string2:"); 9. gets(str2); 10. for(i=0; str1[i]!='\0'; i++) ; /*注意,此处空语句不可少*/ 11. for(j=0;str2[j]!='\0';j++) 12. { str1[i]=str2[j]; 13. i++; 14. } 15. str2[i]='\0'; /*给出新的字符串的结束符*/ 16. printf("the catenated string is %s",str1); 17. }
(三)下面程序的功能是用strcat函数实现将字符串2连接到字符串1的后面并输出。
1. /* c8-4.c 字符串连接*/ 2. #include "stdio.h" 3. #include "string.h" 4. void main( ) 5. { char str1[80]="This Is a ",str2[80]="c Program"; 6. printf("String1 is: %s\n",str1); 7. printf("String2 is: %s\n",str2); 8. strcat(str1,str2); /*使用strcat函数实现*/ 9. printf("Result is: %s\n",str1); 10. }
(四)下面程序的功能是实现将一个字符串中的所有大写字母转换为小写字母并输出。
例如:当字符串为"This Is a c Program"
输出:"this is a c program"
1. /* c8-5.c 字符串中的大写字母转为小写字母*/ 2. #include "stdio.h" 3. void main( ) 4. { char str[80]="This Is a c Program"; 5. int i; 6. printf("String is: %s\n", str); 7. for(i=0; str[i]!='\0'; i++) 8. if (str[i]>='A' && str[i]<='Z') 9. str[i]=str[i]+32; /*将大写字母转换成小写字母*/ 10. printf("Result is: %s\n",str); 11. }
思考:如果将字符串中的所有小写字母转换为大写字母,又将如何修改程序?
四、实验注意事项
(一)注意C语言中字符串是作为一维数组存放在内存中的,并且系统对字符串常量自动加上一个‘\0’作为结束符,所以在定义一个字符数组并初始化时要注意数组的长度。
(二)注意用scanf函数对字符数组整体赋值的形式。