我们在编写程序时,经常需要对字符和字符串进行复制,连接,比较,大小写转换等相关的操作,这些操作我们都可以通过字符串函数来实现。

1.字符串复制 (strcpy)

字符串复制是将​源字符数组中的元素复制到目的字符数组中,其语法格式:

strcpy(目的字符数组名,源字符数组名)

注:(1)把源字符数组中的字符串复制到目的字符数组中,​字符串结束标志'\0’也一同复制

(2)要求​目的字符数组有足够的长度​,否则不能全部装入所复制的字符串。

(3)“目的字符数组名” 必须写成​数组名形式​;  而“源字符数组名”可以是​字符数组名​,也可以是一个​字符串常量​,这时相当于把一个字符串赋予一个字符数组。

(4)不能用赋值语句将一个字符串常量或字符数组直接赋给一一个字符数组。

代码实现:

#include <stdio.h>
#include <string.h>
int main()
{
char str1[30] = { 0 };
char str2[30] = { 0 };
printf("输入目的字符串:\n");
gets(str1);
printf("输入源字符串:\n");
gets(str2);

printf("输出目的字符串:\n");
puts(str1);
printf("输出源字符串:\n");
puts(str2);

strcpy(str1, str2);
printf("调用strcpy函数进行字符串复制:\n");
printf("复制字符串之后的目的字符串:\n");
puts(str1);
return 0;
}

程序运行结果:

C语言学习--字符串处理函数(复制,连接,比较,大小写转换)_#include

2.字符串连接(strcat)

字符串连接就是将​一个字符串连接到另一个字符串的末尾,使其组合成一个新的字符串,其语法格式:

strcat (目的字符数组名,源字符数组名)


注:(1)把源字符数组中的字符串连接到目的字符数组中字符串的后面,并​删去目的字符数组中原有的串结束标志“\0”​。

      (2)​目的字符数组应有足够的长度​,否则很可能无法装下连接后的字符串。

代码实现:

#include <stdio.h>
#include <string.h>
int main()
{
char str1[30] = { 0 };
char str2[30] = { 0 };
printf("输入目的字符串:\n");
gets(str1);
printf("输入源字符串:\n");
gets(str2);

printf("输出目的字符串:\n");
puts(str1);
printf("输出源字符串:\n");
puts(str2);

strcat(str1, str2);
printf("调用strcpy函数进行字符串复制:\n");
printf("字符串连接之后的目的字符串:\n");
puts(str1);
return 0;
}

程序运行结果:

C语言学习--字符串处理函数(复制,连接,比较,大小写转换)_#include_02

3.字符串比较(strcmp)

字符串比较就是​将​一个字符串与另一个字符串从首字母开始,按照ASCII码的顺序逐个比较​,其语法格式:

strcmp(字符数组名1,字符数组名2)

注:当两个字符串进行比较时,若出现不同的字符,则以第一个不同字符的比较结果作为整个比较的结果。

代码实现:

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int main()
{
char ps[10] = { 0 };
int i = 0;
printf("请输入密码:");
for (i = 0; i<3; i++)
{
scanf("%s", ps);
if (strcmp(ps, "nihao") == 0)
{
printf("登录成功。\n");
break;
}
else
{
printf("密码输入错误,请重新输入:\n");
}
}
if (3 == i)
{
printf("登录失败,程序退出。\n");
}
system("pause");
return 0;
}

本代码实现的是一个密码锁的运行,三次输入密码的机会。利用strcmp函数将输入的字符串和预先给定的密码进行比较,如果相同登陆成功!

程序运行结果:

C语言学习--字符串处理函数(复制,连接,比较,大小写转换)_字符串_03

​4.字符串大小写转换​(strupr and strlwr)

strupr是将字符串中的小写字母转换成大写字母,相反strlwr是将字符串中的大写字母转换成小写字母,其语法格式:

strupr(字符串)
strlwr(字符串);

​代码实现:

#include <stdio.h>
#include <string.h>
int main()
{
char text[20] = { 0 };
char change[20] = { 0 };
int num = 0;
int i = 0;
while (1)
{
printf("输入转换大小写方式(1.表示大写,2.表示小写,0.表示退出):\n");
scanf("%d", &num);
if (1 == num)
{
printf("输入一个字符串:\n");
scanf("%s", text);
strcpy(change, text);
strupr(change);
printf("转换成大写字母的字符串为:%s\n", change);
}
else if (2 == num)
{
printf("输入一个字符串:\n");
scanf("%s", text);
strcpy(change, text);
strlwr(change);
printf("转换成小写字母的字符串为:%s\n", change);
}
else if (0 == num)
{
break;
}
}
return 0;
}

在这里我们要注意一个小问题:

C语言学习--字符串处理函数(复制,连接,比较,大小写转换)_#include_04

我用的是vs2013编译器,这里显示的错误是需要我们将strupr改成_strupr

如果进行修改会使我们的程序正常运行,但这样我们的程序会丧失通用性。

程序运行结果:C语言学习--字符串处理函数(复制,连接,比较,大小写转换)_#include_05