在C语言中没有专门的字符串类型变量来保存一个字符串,需要通过数组和指针的方式来保存或者指向一个字符串。一.字符数组的应用1.字符数组的定义和引用:
一般形式:char 数组标识符[常量表达式]
如:char cArray[5];
2.字符数组的引用:
和其他数据类型一样,也是使用下标的形式,如引用上面数组中的元素。
cArray[0]=’H’;
3.字符数组初始化:
方法一:逐个字符赋给数组中的各元素
如charcArray[5]={‘H’,’e’,’l’,’l’,’o’};
例:使用字符数组输出一个字符串
#include<stdio.h>intmain(){charcArray[5]={‘H’,’e’,’l’,’l’,’o’};int i;for(i=0;i<5;i ){printf(“%c”,cArray[i]);}printf(“\n”);return 0;}
方法二:如果在定义字符数组时进行初始化,可以省略数组长度。
方法三: 利用字符串给字符数组赋初值:
如:char cArray[]={“Hello”};或
char cArray[]=”Hello”;
例:使用二维字符数组输出一个钻石形状
#include<stdio.h>int main(){intiRow,iColumn;charcDiamond[][5]={ {”,”,’*’}, {”,’*’,”,’*’}, {‘*’,”,”,”,’*’}, {”,’*’,”,’*’},{”,”,’*’}};for(iRow=0;iRow<5;iRow ){for(iColumn=0;iColumn<5;iColumn ){printf(“%c”,cDiamond[iRow][iColumn]);}printf(“\n”);}return 0;}4.字符数组的结束标志:
字符串总是以”\0″作为串的结束符,所以用字符串方式赋值比用字符逐个赋值要多占一个字节,多占的字节用于存放字符串结束标志”\0″。
5.字符数组的输入输出
方法一:使用格式符”%c”,对字符逐个输入输出,如:
for(i=0;i<5;i )
{
printf(“%c”,cArray[i]);
}
变量为循环的控制量,在循环中作为数组的下标进行循环输出。
方法二:使用格式符”%s”,如:
charcArray[]=”GoodDay!”;
printf(“%s”,cArray);
使用%s要注意的几点:
1.输出字符不包括结束符\0
2.printf函数中的输出项是字符数组名cArray,而不是数组中的元素名
3.如果数组长度大于字符串实际长度,也只输出到\0为止
4.如果一个字符数组中包含多个\0结束字符,则在遇到第一个\0时输出就结束。
6.字符数组的应用:例:计算字符串中有多少个单词#include<stdio.h>intmain(){charcString[100]; //定义保存字符串的数组intilndex,iWord=1;//iWord表示单词的个数charcBlank;//表示空格gets(cString);//输入字符串if(cString[0]==’\0′)//判断如果字符串为空的情况{printf(“First char just is a blank!\n”); }else if(cString[0]==”)//判断第一个字符为空格{printf(“Firstcharjust is a blank!\n”);}else{ for(ilndex=0;cString[ilndex]!=’\0′;ilndex )//循环判断每一个字符 {cBlank=cString[ilndex];//得到数组中的字符元素if(cBlank==”) //判断是不是空格{ iWord ;} }printf(“%d\n”,iWord);} return 0;}二.字符串处理函数1.字符串复制在字符串处理函数中包含strcpy函数,该函数将复制特定长度的字符串到另一个字符串中。格式如下:strcpy(目的字符数组名,源字符数组名)功能是把源字符数组中的字符串复制到目的字符数组中,字符串结束标志”\0“也一起复制。需注意以下几点:
例:
#include<stdio.h>#include<string.h>int main(){ char str1[30],str2[30];printf(“输入目的字符串:\n”);gets(str1);printf(“输入源字符串:\n”);gets(str2); prints(“输出目的字符串:\n”); puts(str1); printf(“输出源字符串:\n”); puts(str2); strcpy(str1,str2); printf(“调用strcpy函数进行字符串拷贝:\n”);printf(“拷贝字符串之后的目的字符串:\n”);puts(str1);return 0;}
2.字符串连接
指将一个字符串连接到另一个字符串的末尾,使其组合成一个新的字符串,在字符串处理函数中,strcat 函数具有字符串连接功能。如:
strcat(目的字符数组名,源字符数组名)
把源字符数组中的字符串连接到目的字符数组中字符串的后面,并删去目的字符数组中原有的串结束标志”\0″。
例:
#include<stdio.h>#include<string.h>int main(){ char str1[30],str2[30];printf(“输入目的字符串:\n”);gets(str1);printf(“输入源字符串:\n”);gets(str2); printf(“输出目的字符串:\n”); puts(str1);printf(“输出源字符串:\n”);puts(str2);strcat(str1,str2);//调用strcat函数进行字符串连接 printf(“调用strcat函数进行字符串连接:\n”); printf(“字符串连接之后的目的字符串:\n”); puts(str1); return 0;}3.字符串比较
将一个字符串与另一个字符串从首字母开始,按照ASCLL码的顺序进行逐个比较。strcmp函数具有在字符串间进行比较的功能。
strcmp(字符数组名1,字符数组名2)
当两个字符串进行比较时若出现不同的字符,则以第一个不同的字符的比较结果作为整个比较的结果。
例:分别定义4个字符数组,分别用来存储用户名,密码和用户输入的用户名及密码字符串,然后分别调用strcmp函数比较用户输入的用户名和密码是否正确。
#include<stdio.h>#include<string.h>int main(){char user[20]={“mrsoft”};char password[20]={“mrkj”};char ustr[20],pwstr[20];int i=0;while(i<3){printf(“输入用户名字符串:\n”);gets(ustr);printf(“输入密码字符串:\n”);gets(pwstr);if(strcmp(user,ustr)){printf(“用户名字符串输入错误!\n”);}else{ if(strcmp(password,pwstr)) {printf(“密码字符串输入错误!\n”); } else {printf(“欢迎使用!\n”);break; }}i ;}if(i==3){ printf(“输入字符串错误3次!\n”);}return 0;}
4.字符串大小写转换
strupr(字符串)将字符串中的小写字母变成大写字母
strlwr(字符串)将字符串中的大写字母变成小写字母
例:
#include<stdio.h>#include<string.h>int main(){chartext[20],change[20];int num;int i=0;while(1){printf(“输入转换大小写方式(1大写,2小写,0退出):\n”);scanf(“%d”,&num);if(num==1){ printf(“输入一个字符串:\n”);scanf(“%s”,&text);strcpy(change,text);strupr(change); printf(“转换成大写字母的字符串为:%s\n”,change);}else if(num==2){ printf(“输入一个字符串:\n”);scanf(“%s”,&text);strcpy(change,text);strlwr(change);printf(“转换成小写字母的字符串为:%s\n);}elseif(num==0){ break;}}return 0;}
5.获得字符串长度
strlen(字符数组名)
计算字符串的实际长度(不含字符串结束标志”\0″,返回值为字符串实际长度。
例:获取输入字符串的长度,并将输入的两个字符串进行连接,再获取字符串长度。
#include<stdio.h>#include<string.h>int main(){chartext[50],connect[50];int num;printf(“输入一个字符串:\n”);scanf(“%s”,&text);num=strlen(text);printf(“字符串长度为:%d\n”,num);printf(“再输入一个字符串:\n);scanf(“%s”,&connect);num=strlen(connect);printf(“字符串长度为:%d\n”,num);strcat(text,connect);printf(“将两个字符串进行连接:%s\n”,text);num=strlen(text);printf(“连接后的字符串长度为:%d\n”,num);return 0;}