字符串的有关五种函数操作
1、字符串的复制:
strcpy(目的字符串数组,源字符串数组):
将源字符串中的内容复制到目的字符串中,包括字符串结束标志(\0),目的字符串中的内容会被覆盖掉,源字符串中的内容保持不变。
代码如下:
/*字符串的复制*/
#include<stdio.h>
#include<string.h>
int main()
{
char str1[30],str2[30];
printf("输入字符串1:\n");
gets(str1);
printf("输入字符串2:\n");
gets(str2);
printf("\n");
printf("输出字符串1:\n");
puts(str1);
printf("输出字符串2:\n");
puts(str2);
strcpy(str1,str2); //复制后括号里面后的(str2)会把前面的(str1)的值覆盖掉 copy
printf("\n");
printf("输出复制后的字符串:\n");
puts(str1);
return 0;
}
2、字符串的连接:
strcat(目的字符串数组名,源字符串数组名):
删除目的字符串数组后的结束标志,将源字符串数组中的所有内容都连接在目的字符串数组原有内容的后面,目的字符串数组内容改变,源字符串数组内容不变。
代码如下:
/*字符串的连接*/
#include<stdio.h>
#include<string.h>
int main()
{
char str1[30],str2[30];
printf("输入字符串1:\n");
gets(str1);
printf("输入字符串2:\n");
gets(str2);
printf("\n");
printf("输出字符串1:\n");
puts(str1);
printf("输出字符串2:\n");
puts(str2);
strcat(str1,str2); //str2会把str1的值覆盖掉
printf("\n");
printf("输出连接后的字符串:\n");
puts(str1);
return 0;
}
3、字符串的比较:
strcmp(字符串数组1,字符串数组2):
按照ASCLL码顺序比较两个数组中的字符串,并返回比较结果。
字符串数组1=字符串数组2,返回结果为0;
字符串数组1>字符串数组2,返回结果为正数;
字符串数组1<字符串数组2,返回结果为负数;
代码如下:
/*字符串的比较*/
#include<stdio.h>
#include<string.h>
int main()
{
char z1[20],z2[20];
char mi1[20],mi2[20];
int i;
printf("请设定账号:\n");
gets(z1);
printf("请设定密码:\n");
gets(mi1); //可以在定义的时候设定
while(i<3)
{
printf("请输入账号:\n");
gets(z2);
printf("请输入密码:\n");
gets(mi2);
if(strcmp(z1,z2)) // 计算机非0即正(正确),只要不是0,就满足。
{
printf("账号错误!\n");
}else{
if(strcmp(mi1,mi2))
{
printf("密码错误!\n");
}else{
printf("欢迎光临!\n");
break; //当账号密码都输入正确时,跳出循环。
}
}
i++;
}
if(i==3){
printf("你的账户已锁定,请在20分钟后再次输入。"); //可以通过更改循环的次数,设定最多输入的次数
}
return 0;
}
4、字符串的大小转化:
strupr(字符串):
将字符串小写字母转化为大写,其他字母不变。
Strlwr(字符串):
将字符串大写字母转化为小写,其他字母不变。
代码如下:
/*字符串的大小写转换*/
#include<stdio.h>
#include<string.h>
int main()
{
char text[100],change[100];
int num;
int i=0;
while(1){ //条件一直满足,循环一直进行,除非break.
printf("请输入指令(1,转化为大写;2,转化为小写;0,退出;)\n");
scanf("%d",&num);
if(num==1){
printf("请输入:\n");
scanf("%s",&text);
strcpy(change,text); //将text中的内容复制到change中,有change完成转换,也可以直接由text完成全过程,但是这样看起来更正规
strupr(change); //uper
strupr(text);
printf("转化后的结果为:%s\n",change);
}else if(num==2){
printf("请输入:\n");
scanf("%s",&text);
strcpy(change,text);
strlwr(change); //lower
printf("转化后的结果为:%s\n",change);
}else if(num==0){
break;
}else{
printf("请输入正确的指令!");
}
}
return 0;
}
5、获得字符数组长度:
strlen(字符数组名):
计算字符串的实际长度(不包括结束标志),函数返回值为字符串的实际长度。
/*获得字符串的长度*/
#include<stdio.h>
#include<string.h>
int main(){
char a[100],b[100];
int sum;
printf("请输入;\n");
scanf("%s",&a);
sum=strlen(a); //length:长度
printf("你输入的内容所占的字节为:%d\n",sum);
printf("请再次输入:\n");
scanf("%s",&b);
sum=strlen(b);
printf("你第二次输出的内容所占的字节为:%d\n",sum);
strcat(a,b);
printf("两次输入内容连接后的结果为:%s\n",a);
sum=strlen(a);
printf("两次输入内容共占字节为:%d\n",sum);
return 0;
}
//有很多代码是没有必要写的,但是为看的更明白,所以写了出来
1、因为字符串是一段字符,所以本文使用的都是字符串数组。
2、输入字符串时,不要超过所定义的字符串数组长度,否者很容易出现问题。
3、对于字符串名称的记忆,我们可以通过记忆单词的方式记忆:
str是字符串string的英文缩写,cpy是复制copy的英文缩写,cat是连接catenate 的英文缩写,cmp是比较compare的英文缩写,len是长度length的英文缩写,至于uper和lwr那就不用多说了。
4、在使用字符串函数是要带上#include<string.h>,至于原因,我想大家都知道。