前两个单位咱们操做的都是一些数值型数据,整型或浮点型;可是在程序设计中字符中的处理是很是有用的。好比有一篇文章以文件的形式存在计算机中,如是要统计这篇文章有多少个单词,或都查找有没有出现某个关键词,就须要学习字符串的处理技术,还要用到C语言库中提供的字符串处理函数。编程
字符串的处理基于字符数组,字符数组就是字符串,因些,要从字符数组的定义讲起。数组
字符数组的意义就是用数组方法来解决基于字符串的处理操做。函数
即然知道了字符数组是来解决基于字符串的处理操做的。那么咱们先来分一下字符,字符串,字符数组又该怎么解释呢。学习
知道了什么是字符,字符串,字符数组其实咱们应该也能总结出来了,字符数组是能够包含多个字符,多个字符链接起来后就是字符串了,而字符串的程序语言中表示必须经过字符数组来使用。spa
数组在现实生活,及软件开发过程当中使用很是灵活,一维数组能够分为整型一维数组、浮点型一维数组及字符型一维数组;二维数组及多维数组分法也和一维数组分法同样,下面咱们主要讲解字符数组中的一维字符数组。设计
(1) 一维数组的定义的形式始下:code
char 数组名[常量表达式];blog
例如开发
char name[100];字符串
char sex[10];
(2) 对于字符数组的定义说明以下请参考第十单元一维数组的定义说明部分:
(1) 单个字符赋值在定义数组时对数组元素赋以初值(同整型)。例如:
char a[5]={'a','b','c','d','e'};把值放在一个大括号中依次以逗号分隔,至关于a[0]='a',a[1]='b',a[2]='c',a[3]='d',a[4]='e';其中' '括起来只能是单个字符,字符常量的意思。
(2) 上述方法在字符数组中使用很是少主要用以下两种方法:
① char 字符数组名[最大字符数+1]=“字符串”;
② char 字符数组名[]=”字符串”;默认长度是字符串字符个数+1。
③ char 字符数组名[最大字符数+1]=“字符串”; char 字符数组名[]={”字符串”}
注:双引号“”的外面能够加上{}变成{“”}也是对的,通常状况下用“”是不加{}的。
总结:字符数组初始化方式共三种
字符数组初始化:(在定义字符数组同时,对数组元素赋以初值)有如下三种
①char a[20]={'n','m','1','\n','0'};
②char a[20]="nm1\n0";
③char a[20]={"nm1\n0"};
#include "stdio.h" void main() { char name[100]; printf("请输入姓名:"); scanf("%s",name); printf("你的姓名是:%s\n",name);
注:只有在定义字符数组的时候能够用赋值符号给字符数组总体赋值,定义完字符数组之后,再用赋值符号给字符数组总体赋值是错误的。
char a[5];
a[5]=”mnop”;这样写法是错误的
字符串经常使用函数能够很方便的让咱们操做字符数组,字符串函数有不少,可参考《C语言函数库》查看各类函数的应用,今天咱们来学习下列四个经常使用的字符串函数:strcmp(),strlen(),strcpy(),strcat等。下面咱们就依次来说下这些函数的应用方法。
(1) 调用方式:gets(字符数组)
(2) 函数功能:从标准输入设备(stdin)──键盘上,读取1个字符串(能够包含空格),并将其存储到字符数组中去。
(3) 使用说明
① gets()读取的字符串,其长度没有限制,以敲回车键结束。编程者要保证字符数组有足够大的空间,存放输入的字符串。
② 该函数输入的字符串中容许包含空格,而scanf()函数不容许。
(4) 应用代码以下
/*利用gets()给数组赋值 */ #include "stdio.h" void main() { char name[100]; printf("请输入字符串:"); gets(name); }
(1) 调用方式:puts(字符数组)
(2) 函数功能:把字符数组中所存放的字符串,输出到标准输出设备中去,并用‘\n’取代字符串的结束标志‘\0’。因此用puts()函数输出字符串时,不要求另加换行符.
(3) 使用说明
① 字符串中容许包含转义字符,输出时产生一个控制操做。
② 该函数一次只能输出一个字符串,而printf()函数也能用来输出字符串,且一次能输出多个。
(4) 应用代码以下
/*利用gets()给数组赋值 */ #include "stdio.h" void main() { char name[100]; printf("请输入字符串:"); gets(name); printf("输入字符串是:"); puts(name); }
(1) 调用方式:strcmp(字符串1 ,字符串2)
其中“字符串”能够是串常量,也能够是1维字符数组。
(2) 函数功能:比较两个字符串的大小。
若是:字符串1等于字符串2,函数返回值等于0;
字符串1大于字符串2,函数返回值正整数1。
字符串1小于字符串2,函数返回值正整数-1。
(3) 使用说明
① 若是一个字符串是另外一个字符串从头开始的子串,则母串为大。
② 不能使用关系运算符“==”来比较两个字符串,只能用strcmp() 函数来处理。
(4) ACM应用代码以下
/*功能:简单密码检测程序*/ #include "stdio.h" #include "string.h" void main() { char pass_str[80]; /*定义字符数组passstr*/ int i; /*检验密码*/ for(i=1;i<=3;i++) { printf("请输入密码\n"); gets(pass_str); /*输入密码*/ if(strcmp(pass_str,"password")!=0) /*口令错*/ printf("口令错误,还有%d次机会\n",3-i); else { printf("登陆成功\n");/*输入正确密码所进入的程序段*/ break; /*输入正确的密码,停止循环*/ } } }
(1) 调用方式:strcpy(字符数组, 字符串)
其中“字符串”能够是串常量,也能够是字符数组。
(2) 函数功能:将“字符串”完整地复制到“字符数组”中,字符数组中原有内容被覆盖。
(3) 使用说明
① 字符数组必须定义得足够大,以便容纳复制过来的字符串。复制时,连同结束标志'\0'一块儿复制。
② 不能用赋值运算符“=”将一个字符串直接赋值给一个字符数组,只能用strcpy()函数来处理。
(4) ACM应用代码以下
/*利用strcpy()操做数组 */ #include "stdio.h" void main() { char name1[100]=“zhangsan”; char name2[100]=”lisi”; strcpy (name1,name2); printf("新数组1是:%s",name1); }
(1) 调用方式:strcat(字符数组, 字符串)
其中“字符串”能够是串常量,也能够是字符数组。
(2) 函数功能:把“字符串”链接到“字符数组”中的字符串尾端,并存储于“字符数组”中。“字符数组”中原来的结束标志,被“字符串”的第一个字符覆盖,而“字符串”在操做中未被修改。
(3) 使用说明
① 因为没有边界检查,编程者要注意保证“字符数组”定义得足够大,以便容纳链接后的目标字符串;不然,会因长度不够而产生问题。
② 链接前两个字符串都有结束标志'\0',链接后“字符数组”中存储的字符串的结束标志'\0'被舍弃,只在目标串的最后保留一个'\0'。
(1) 调用方式:strlen(字符串);
其中“字符串”能够是串常量,也能够是字符数组。
(2) 函数功能:求字符串(常量或字符数组)的实际长度(不包含结束标志)。
(3) ACM经典代码:统计字符个数
/* 统计个数*/ #include "stdio.h" void main() { char str[100]; int i; int c1=0,c2=0;//c1统计小写字母个数,c2统计大写字母个数 printf("请输入一个字符串:"); gets(str); for(i=0;i<strlen(str);i++) { if(str[i]>='a'&&str[i]<='z') //判断是小写字母 { c1++; } else if(str[i]>='A'&&str[i]<='Z') { c2++; } } //输出统计结果 printf("小写字母:%d个,大写字母:%d个",c1,c2); }
/* Note:Your choice is C IDE */ #include "stdio.h" #include "string.h" void main() { //定义三个数组 char ay1[100],ay2[100]; char word[100];//暗语进行链接后的新数组 //输入暗语 printf("请第一我的说暗语:"); gets(ay1); printf("请第二我的说暗语:"); gets(ay2); //组成一句暗语 strcat(strcpy(word,ay1),ay2); //与暗语进行比较 if(strcmp(word,"天王盖地虎宝塔镇河妖")==0) { printf("任务成功\n"); strcpy(ay1,"江南风光好"); strcpy(ay2,"遍地红花开"); printf("第一人的新暗语:"); puts(ay1); printf("第二人的新暗语:"); puts(ay2); } else { printf("任务失败\n"); } }