文章目录
前言
提示:字符串库函数的仿写,让新手对字符串的库函数更加了解,日后使用的更加方便。
一、库函数是什么?
库函数是将函数封装入库,供用户使用的一种方式。 方法是把一些常用到的函数编完放到一个文件里,供不同的人进行调用。 调用的时候把它所在的文件名用#include<>加到里面就可以了。
二、字符串库函数的种类
求字符串长度strlen
库函数的调用
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
int main()
{
char arr1[] = { "abcdefg" };
int ret = strlen(arr1);
printf("%d\n", ret);
return 0;
}
库函数的参数和返回类型
仿写库函数
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<assert.h>
size_t my_strlen(const char* str1)
{
assert(str1);
size_t num = 0;
while (*str1++)
{
num++;
}
return num;
}
int main()
{
char arr1[] = { "abcdefg" };
size_t ret = my_strlen(arr1);
printf("%d\n", ret);
return 0;
}
长度不受限制的字符串函数 strcpy,strcat,strcmp
字符串的拷贝strcpy
库函数的调用
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
int main()
{
//把字符串数组arr1的字符串拷贝到字符串数组arr2中
char arr1[] = { "abcdef" };
char arr2[10] = { 0 };
char * ret = strcpy(arr2, arr1);
printf("%s\n", ret);
return 0;
}
仿写库函数
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<assert.h>
char* my_strcpy(char* dest, const char* src)
{
assert(dest && src);
//记录指针 dest 的初始位置
char* ret = dest;
while (*dest++ = *src++)
{
;
}
return ret;
}
int main()
{
char arr1[] = { "abcdef" };
char arr2[10] = { 0 };
char* ret = my_strcpy(arr2, arr1);
printf("%s\n", ret);
return 0;
}
字符串的追加strcat
调用库函数
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
int main()
{
//把arr2的字符串追加给arr1
char arr1[20] = { "Hello " };
char arr2[] = { "xiaobite!" };
char* ret = strcat(arr1, arr2);
printf("%s\n", ret);
return 0;
}
仿写库函数
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<assert.h>
char* my_strcat(char* dest, const char* src)
{
assert(dest && src);
//记录指针 dest 的初始位置
char* ret = dest;
//找到\0的位置
while (*dest)
{
dest++;
}
while (*dest++ = *src++)
{
;
}
return ret;
}
int main()
{
char arr1[20] = { "Hello " };
char arr2[] = { "xiaobite!" };
char* ret = my_strcat(arr1, arr2);
printf("%s\n", ret);
return 0;
}
字符串比较strcmp
调用库函数
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
int main()
{
char arr1[] = { "Hello!" };
char arr2[] = { "Heabc!" };
int ret = strcmp(arr1, arr2);
if (ret < 0)
{
printf("字符串arr1比字符串arr2小!\n");
}
else if (ret == 0)
{
printf("字符串arr1等于字符串arr2!\n");
}
else
{
printf("字符串arr1大于字符串arr2!\n");
}
return 0;
}
仿写库函数
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<assert.h>
int my_strcmp(const char* str1, const char* str2)
{
assert(str1 && str2);
while (*str1 == *str2)
{
str1++;
str2++;
}
if (*str1 == '\0' && *str2 == '\0')
{
return 0;
}
else
{
return *str1 - *str2;
}
}
int main()
{
char arr1[] = { "Hello!" };
char arr2[] = { "Heabc!" };
int ret = my_strcmp(arr1, arr2);
if (ret < 0)
{
printf("字符串arr1比字符串arr2小!\n");
}
else if (ret == 0)
{
printf("字符串arr1等于字符串arr2!\n");
}
else
{
printf("字符串arr1大于字符串arr2!\n");
}
return 0;
}
长度受限制的字符串函数:strncpy,strncat,strncmp
受限制字符串的拷贝strncpy
调用库函数
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
int main()
{
char arr1[] = { "Hello xiaobite!" };
char arr2[10] = { 0 };
char* ret = strncpy(arr2, arr1, 5);
printf("%s\n", ret);
return 0;
}
仿写库函数
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<assert.h>
char* my_strncpy(char* dest, const char* src, size_t count)
{
assert(dest && src);
//记录dest指针的初始位置
char* ret = dest;
while (count--)
{
*dest++ = *src++;
}
return ret;
}
int main()
{
char arr1[] = { "Hello xiaobite!" };
char arr2[10] = { 0 };
char* ret = strncpy(arr2, arr1, 5);
printf("%s\n", ret);
return 0;
}
有限制的字符串追加strncat
调用库函数strncat
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
int main()
{
char arr1[20] = { "Hello " };
char arr2[] = { "xiaobite!" };
char* ret = strncat(arr1, arr2, 4);
printf("%s\n", ret);
return 0;
}
仿写库函数strncat
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<assert.h>
char* my_strncat(char* dest, const char* src, size_t count)
{
assert(dest && src);
//记录dest指针的初始位置
char* ret = dest;
while (*dest)
{
dest++;
}
while (count--)
{
*dest++ = *src++;
}
return ret;
}
int main()
{
char arr1[20] = { "Hello " };
char arr2[] = { "xiaobite!" };
char* ret = my_strncat(arr1, arr2, 4);
printf("%s\n", ret);
return 0;
}
有限制的比较字符串strncmp
调用库函数strncmp
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<string.h>
int main()
{
char arr1[] = { "abcdefg" };
char arr2[] = { "abcgehd" };
//比较前五个字符
int ret = strncmp(arr1, arr2, 5);
if (ret > 0)
{
printf("arr1 > arr2\n");
}
else if (ret == 0)
{
printf("arr1 == arr2\n");
}
else
{
printf("arr1 < arr2\n");
}
return 0;
}
仿写字符串函数strncmp
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<assert.h>
int my_strncmp(const char* str1, const char* str2, size_t count)
{
assert(str1 && str2);
while (*str1 == *str2)
{
str1++;
str2++;
count--;
if (count == 0)
{
return 0;
}
}
return *str1 - *str2;
}
int main()
{
char arr1[] = { "abcdefg" };
char arr2[] = { "abcgehd" };
//比较前五个字符
int ret = my_strncmp(arr1, arr2, 5);
if (ret > 0)
{
printf("arr1 > arr2\n");
}
else if (ret == 0)
{
printf("arr1 == arr2\n");
}
else
{
printf("arr1 < arr2\n");
}
return 0;
}
总结
提示:这是部分字符串函数的库函数,包含了拷贝,比较,追加字符串函数等,这些相对来说都是比较重要的,下一篇博客,我将会写strstr ,strtok , memcpy , memmove的库函数。