C 语言中的字符串函数
C 语言中的字符串虽然不是一种独立的数据类型,但是这并不影响其重要地位,所以在 C 语言中会有一些专门针对字符串的函数。
1. 字符串函数
字符串函数是专门用来进行字符串操作的。C 语言提供了一个标准的函数库 string.h
。在这个函数库中大致存在了 22 个字符串的函数。我们这里所介绍的字符串函数是来自于这个标准函数库中比较常用的的一部分函数。除了这个函数库,还会有第三方的函数库提供的字符串的一些函数。这些不在本教程的讨论范围内。
常用的字符串函数包含一下几个:
序号 | 函数 | 功能 |
---|---|---|
1 | strlen(str1) | 获取 str1 字符串的长度 |
2 | strcpy(str1,str2) | 将 str2 中的内容复制到 str1 中 |
3 | strcat(str1,str2) | 将 str2 连接到 str1 的后面 |
4 | strcmp(str1,str2) | 比较两个字符串,如果两个字符串一致则返回 0;如果 str1 大于 str2 则返回正数;如果 str1 小于 str2 则返回负数 |
5 | strchr(str1,shar1) | 在 str1 中查找字符 char1 第一次出现的位置,返回该位置的指针 |
` | 6 | strstr(str1.str2) |
2. 示例程序
#include <stdio.h>
#include <string.h>
int main()
{
char a[100] = "Welcome to our wiki!";
char b[] = "It is a interest place.";
char c[20] = "";
printf("string length = %lu\n", strlen(a));
printf("Compare a to a : %d\n", strcmp(a, a));
printf("Compare a to b : %d\n", strcmp(a, b));
printf("Compare b to a : %d\n", strcmp(b, a));
printf("Before copy : %s\n", c);
strcpy(c, a);
printf("After copy : %s\n", c);
char \*pchar;
pchar = strchr(a, 'o');
printf("Character : %s\n", pchar);
pchar = strstr(a, "our");
printf("String : %s\n", pchar);
strcat(a, b);
printf("After concatenate strings : %s\n", a);
return 0;
}
运行结果:
string length = 20
Compare a to a : 0
Compare a to b : 14
Compare b to a : -14
Before copy :
After copy : Welcome to our wiki!
Character : ome to our wiki!
String : our wiki!
After concatenate strings : Welcome to our wiki!It is a interest place.
在示例程序中,我们展示了常用的字符串函数的使用。在获取字符串大小的函数中,我们统计的字符串的大小是包含空格和符号的。但是不包含字符数组中的最后一个表示字符串结束的 \0
字符。
比较字符串的大小其实是比较其里面字符编码的数值大小求差值,所以两个相同的字符差值是 0 ,如果前面的字符编码值小于后面的,那么就会出现负值,反之就是一个正值。。但是具体的比较方式留在这里大家通过尝试不同的值猜测一下。
拷贝字符串,就是将一个真的复制生成一个副本。而不是如同我们之前提及的使用数组给函数传递参数的时候一样,只是传递的函数本体,而不是副本。因此你在复制字符串完成后,即使修改了原有字符串,也不会影响到新生成的字符串。
字符的查找与字符串的查找基本是类似的,通过示例可以看出,我们通过字符查找 o
那么会返回第一个出现 o
的位置的指针,而通过字符串查找,只有完全匹配字符的情况下才返回指针,所以会跳过字符查找出现的位置,继续查找,直到找到 our
这个字符串。
拼接字符串就是将两个字符串拼接,这里同样需要注意。前面是数组大小要足够大,可以容纳被拼接的字符串,否则会出现问题。
3. 小结
字符串的应用非常广泛,所以在 C 语言的标准函数库中,提供了相关的支持。这里我们只是介绍了标准函数库中的大约四分之一的常用函数的使用。这些函数的使用中,请大家记住字符串是由字符数组组成这一特性,在拼接,复制等等操作的时候,确认目标数组的大小是不是可以足够的位置装载相关的元素。