目录
1.strncpy的使用和模拟实现
使用
模拟实现
2.strncat的使用和模拟实现
使用
模拟实现
3.strncmp的使用和模拟实现
使用
模拟实现
4.strchr的使用和模拟实现
使用
模拟实现
5.strcoll的使用和模拟实现
使用
模拟实现
1.strncpy的使用和模拟实现
描述
C 库函数 char *strncpy(char *dest, const char *src, size_t n) 把 src 所指向的字符串复制到 dest,最多复制 n 个字符。当 src 的长度小于 n 时,dest 的剩余部分将用空字节填充
声明
char *strncpy(char *dest, const char *src, size_t n)参数
- dest -- 指向用于存储复制内容的目标数组
- src -- 要复制的字符串
- n -- 要从源中复制的字符数
返回值
该函数返回最终复制的字符串
使用
#include <stdio.h>
#include <string.h>
int main()
{
char arr1[100] = {0};
char arr2[] = "hello";
strncpy(arr1,arr2,3)
printf("%s\n",arr1);
return 0;
}
模拟实现
#include <stdio.h>
char* my_strncpy(char* des, char* res, int x)
{
char* ret = des;
assert(res);
assert(des);
int i = 0;
while (i++ < x)
{
*des++ = *res++;
}
return ret;
}
int main()
{
char arr1[100] = { 0 };
char arr2[] = "hello";
int ret = 3;
my_strncpy(arr1, arr2, ret);
printf("%s\n", arr1);
return 0;
}
2.strncat的使用和模拟实现
描述
C 库函数 char *strncat(char *dest, const char *src, size_t n) 把 src 所指向的字符串追加到 dest 所指向的字符串的结尾,直到 n 字符长度为止
声明
char *strncat(char *dest, const char *src, size_t n)参数
- dest -- 指向目标数组,该数组包含了一个 C 字符串,且足够容纳追加后的字符串,包括额外的空字符
- src -- 要追加的字符串
- n -- 要追加的最大字符数
返回值
该函数返回一个指向最终的目标字符串 dest 的指针
使用
#include <stdio.h>
#include <string.h>
int main()
{
char arr1[100] = "hello";
char arr2[] = "bro******";
strncat(arr1,arr2,3);
printf("%s\n",arr1);
return 0;
}
模拟实现
#include <stdio.h>
char* my_strncat(char* arr1, const char* arr2, int ret)
{
char* r = arr1;
while (*arr1)
{
arr1++;
}
//数组arr1到达临界
while (ret--)
{
*arr1++ = *arr2++;
}
return r;
}
int main()
{
char arr1[100] = "hello";
char arr2[] = "bro******c";
int ret = 3;
my_strncat(arr1, arr2, ret);
printf("%s\n", arr1);
return 0;
}
3.strncmp的使用和模拟实现
描述
strncmp() 是一个标准库函数,用于比较两个字符串的前 n 个字符是否相等
strncmp() 函数通常用于比较两个字符串,以确定它们是否相等或哪个字符串在字典顺序上更小
C 库函数 int strncmp(const char *str1, const char *str2, size_t n) 把 str1 和 str2 进行比较,最多比较前 n 个字符
声明
int strncmp(const char *str1, const char *str2, size_t n)参数
- str1 -- 要进行比较的第一个字符串
- str2 -- 要进行比较的第二个字符串
- n -- 要比较的最大字符数
返回值
该函数返回值如下:
- 如果返回值 < 0,则表示 str1 小于 str2
- 如果返回值 > 0,则表示 str1 大于 str2
- 如果返回值 = 0,则表示 str1 等于 str2
使用
#include <stdio.h>
#include <string.h>
int main ()
{
char arr1[15] = "abcdef";
char str2[15] = "ABCDEF";
int ret;
ret = strncmp(str1, str2, 4);
if(ret < 0)
{
printf("str1 小于 str2");
}
else if(ret > 0)
{
printf("str2 小于 str1");
}
else
{
printf("str1 等于 str2");
}
return 0;
}
模拟实现
#include <stdio.h>
int my_strncmp(char* arr1, char* arr2, int ret)
{
assert(arr1);
assert(arr2);
while (ret--)
{
if (*arr1 > *arr2)
{
return +1;
}
else if (*arr1 < *arr2)
{
return -1;
}
arr1++;
arr2++;
}
return 0;
}
int main()
{
char arr1[] = "abcdef";
char arr2[] = "abcref";
int ret = 2;
int num = my_strncmp(arr1, arr2, ret);
if (num == +1)
{
printf("大于");
}
else if (num == -1)
{
printf("小于");
}
else
{
printf("等于");
}
return 0;
}
4.strchr的使用和模拟实现
描述
strchr() 用于查找字符串中的一个字符,并返回该字符在字符串中第一次出现的位置
strchr() 其原型定义在头文件 <string.h> 中, char *strchr(const char *str, int c) 在参数 str 所指向的字符串中搜索第一次出现字符 c(一个无符号字符)的位置
strchr() 函数返回的指针指向字符串中的字符,如果要将该指针用作字符串,应该将其传递给其他字符串处理函数,例如 printf() 或 strncpy()
声明
char *strchr(const char *str, int c)参数
- str -- 要查找的字符串
- c -- 要查找的字符
返回值
如果在字符串 str 中找到字符 c,则函数返回指向该字符的指针,如果未找到该字符则返回 NULL
使用
#include <stdio.h>
#include <string.h>
int main ()
{
char arr[] = "hello world";
char ch = 'o';
char * ptr = strchr(str, ch);
if (ptr != NULL)
{
printf("字符 'o' 出现的位置为 %ld\n", ptr - arr + 1);
}
else
{
printf("没有找到字符 'o' 。\n");
}
return 0;
}
模拟实现
#include <stdio.h>
char* my_strstr(const char* str1, const char* str2)
{
const char* cur = str1;
const char* s1 = NULL;
const char* s2 = NULL;
assert(str1 && str2);
if (*str2 == '\0')
{
return (char*)str1;
}
while (*cur)
{
s1 = cur;
s2 = str2;
while (*s1 == *s2)
{
s1++;
s2++;
}
if (*s2 == '\0')
{
return (char*)cur;
}
cur++;
}
return NULL;
}
int main()
{
char arr1[] = "abbbcdef";
char arr2[] = "bbc";
char* ret = my_strstr(arr1, arr2);
if (ret != NULL)
printf("%s\n", ret);
else
printf("找不到\n");
return 0;
}
5.strcoll的使用和模拟实现
描述
C 库函数 int strcoll(const char *str1, const char *str2) 把 str1 和 str2 进行比较,结果取决于 LC_COLLATE 的位置设置
声明
int strcoll(const char *str1, const char *str2)参数
- str1 -- 要进行比较的第一个字符串
- str2 -- 要进行比较的第二个字符串
返回值
该函数返回值如下:
- 如果返回值 < 0,则表示 str1 小于 str2
- 如果返回值 > 0,则表示 str2 小于 str1
- 如果返回值 = 0,则表示 str1 等于 str2
实例
下面的实例演示了 strcoll() 函数的用法
使用
#include <stdio.h>
#include <string.h>
int main ()
{
char str1[15];
char str2[15];
int ret;
strcpy(str1, "abc");
strcpy(str2, "ABC");
ret = strcoll(str1, str2);
if(ret > 0)
{
printf("str1 大于 str2");
}
else if(ret < 0)
{
printf("str2 小于 str1");
}
else
{
printf("str1 等于 str2");
}
return 0;
}
模拟实现
#include <stdio.h>
int my_strcoll(char* arr1, char* arr2)
{
while (arr1 && arr2)
{
if (arr1 > arr2)
{
return +1;
}
else if (arr1 < arr2)
{
return -1;
}
else
{
;
}
arr1++;
arr2++;
}
return 0;
}
int main()
{
char arr1[] = "abc";
char arr2[] = "ABC";
int ret = my_strcoll(arr1, arr2);
switch (ret)
{
case 1:
{
printf("大于");
break;
}
case -1:
{
printf("小于");
break;
}
case 0:
{
printf("等于");
}
}
return 0;
}