C风格的字符串就是以0结尾的字符数组。通过cstring头文件,可以引入一系列的字符串运算函数,以完成字符串比较、拼接、复制等操作。

版权声明

本文可以在互联网上自由转载,但必须:注明出处(作者:海洋饼干叔叔)并包含指向本页面的链接。

本文不可以以纸质出版为目的进行改编、摘抄。

请见如下示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//Project - StringOperation
#include <cstdio>
#include <cstring>

int main() {
char s1[256] = "Hello";
printf("s1 = %s, len = %lld\n",s1, strlen(s1));

char s2[512] = "World";
printf("strcmp(s1,s2) = %d\n",strcmp(s1,s2));

char s3[512];
strcat(s1," "); //给s1附加一个空格
strcat(s1,s2);
strcpy(s3,s1);
printf("s1 = %s, s2 = %s, s3 = %s",s1,s2,s3);

return 0;
}

上述代码的执行结果为:

1
2
3
s1 = Hello, len = 5
strcmp(s1,s2) = -1
s1 = Hello World, s2 = World, s3 = Hello World

🚩第7行:strlen(s1)函数返回s1字符串包含的字符个数,其返回类型为size_t,在作者的计算机上,size_t即unsigned long long类型。其输出结果可知,该函数返回的是实际字符个数,而不是s1数组的内存大小。strlen的函数名来自英文string length。

🚩第10行:strcmp(s1,s2)函数将字符串s1和s2作比较,其返回类型为int。如果s1 > s2,返回 > 0的整数,如果s1 < s2,返回 < 0的整数,如果两者相等,返回0。所谓字符串比较,事实上是从前到后进行字符的逐一比较,而字符的比较,即比较字符的ASCII码值。由于’H’的ASCII码值 < ‘W’,所以s1 < s2,本例中该函数返回了-1,见执行结果的第2行。strcmp的函数名来自英文string comparison。

🚩第13 ~ 14行:strcat(s1,s2)函数将s2字符串附加在s1字符串的后面。同样基于执行速度的考虑,该函数不会对s1数组的空间进行越界检查,保证s1数组的剩余空间足够容纳s2的内容,是程序员的职责。C语言中的数组,其存储空间的大小是在定义时确定的,无法在执行过程中被改变。strcat的函数名来自英文string concatenation。

🚩第15行:strcpy(s3,s1)函数将字符串s1的内容复制到字符串s3。复制过程中,s3的原内容会被覆盖。同样,程序员需要自行确保s3的空间足够大。strcpy的函数名来自英文string copy。