文章目录
一、字符串操作函数
在C语言程序库中为我们提供了多个字符串操作函数,这些函数的原型包含在string.h头文件中。其中最常用的有:strlen() 、strcat()、strcmp()、strcpy()、等。
长度受限制的字符串操作函数
1、strlen()函数说明与模拟实现
函数原型:
size_t strlen( const char *string );
功能: strlen( )函数用于统计字符串的长度, ‘\0’ 作为结束标志,返回值返回的是字符串中的长度(返回的长度不包括 ‘\0’)
例:
char str1[]="hello";
char str2[5]={
'h','e','l','l','o'};
printf("str1 = %d\n", strlen(str1));
printf("str2 = %d\n", strlen(str2));
由运行结果可知:str1的字符串长度为5,str2的长度不是5,而是21(随机值),对结果进行分析:
str1 在内存中的存储方式,strlen()函数读取到 ‘\0’ 时读取结束,返回值为 ‘\0’ 前面出现的字符个数(不包含 ‘\0’)。
str2 在内存中存放的方式,strlen()函数读取的是 ‘\0’ 之前的字符个数,所以当读取到最后一个字符 o 时并不会停止,而是会继续向后读取,直至遇到 ‘\0’ 为止;str2最后一个字符 ’o‘与 **’\0’**之间的个数是不确定的,所以字符串str2的长度是一个大于5的随机值;
strlen()函数的模拟实现
方法一:计数方式
size_t my_strlen(const char *string)
{
assert(string);
size_t count = 0;
while (*string++)
count++;
return count;
}
方法二:尾指针 — 头指针
size_t my_strlen(const char * string)
{
assert(string);
const char* start = string;//将字符串首地址赋值给start
while (*string) //当指针指向 '\0' 结束循环,此时指针指向的'\0'的首地址
string++;
return string - start;
}
示意图:
方法三:递归的方式实现
size_t my_strlen(const char * string)
{
assert(string);
if (!*string) //当字符串指向 '\0' 时,返回0
return 0;
else
return 1 + my_strlen(string + 1); //当字符串指向不为 '\0' 时,调用函数自身,实现递归调用
}
2、strcpy()函数说明与模拟实现
函数原型:
char *strcpy( char *strDestination, const char *strSource );
功能: strcpy()将strSource为首地址的字符串拷贝到以strDestination为首地址的字符串中(包括 ‘\0’),并返回strDestination的地址。
使用案例:
int main()
{
char str1[]="hello china!";
char str2