【C语言】strlen,str(n)cmp,str(n)cpy,str(n)cat,strstr库函数的代码实现
你知道这些函数,在复制/追加字符串的时候会加上\0吗?
声明:代码里、0就是代表\0,只是不想转换成拼音而已。。。
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <assert.h>
#include <string.h>
//1.模拟实现strlen
//size_t strlen(const char* str); 标准结构,记住返回值是无符号的//size_t my_strlen(const char* arr)
//{
// assert(arr);
// char* start = arr;
// unsigned int count = 0;
// while (*start++)
// {
// count++;
//
// }
// return count;
//}
//int main()
//{
// char arr[] = "abc\0de";
// unsigned int ret = my_strlen(arr);
// printf("%d\n", ret);
//}//模拟实现strcpy ,会拷贝、0
//char* strcpy(char* destination, const char* source);
//char* my_strcpy(char* destination, const char* source)
//{
// assert(destination&&source);
// char* a = source;
//
// //char* ret = source;
//
// char* b = destination;
// while (*b++ = *a++)
// {
// ;
// }
// //return ret;
//
// return source; //实现的功能和return ret是一样的
//}
//int main()
//{
// char arr1[] = "xxxxxxxxx";
// char arr2[] = "abc\0d";
// printf("%s\n",my_strcpy(arr1, arr2)); //abc
//
//}
//int main()
//{
// char arr1[50] = "abcdhhh";
// char arr2[] = "e\0fg";
// strcpy(arr1, arr2);
// printf("%s\n", arr1);
//}//模拟实现strcat 不会把追加字符串的、0加上
//char* strcat(char* destination, const char* source);//char* my_strcat(char* destination, const char* source)
//{
// assert(destination && source);
// char* start = destination;
// while (*start)
// {
// start++;
// }
// while(*start++ = *source++)
// {
// ;
// }
// return destination;
//}//int main()
//{
// char arr1[50] = "abcdhhh";
// char arr2[] = "efg";
// printf("%s\n", my_strcat(arr1, arr2));
//}//int main()
//{
// char arr1[50] = "abcdhhh";
// char arr2[] = "e\0fg";
// strcat(arr1, arr2);
// printf("%s\n",arr1 );
//}//模拟实现strcmp
//int strcmp(const char* str1, const char* str2);//int my_strcmp(const char* str1, const char* str2)
//{
// assert(str1 && str2);
// while (*str1 == *str2)
// {
// if (*str1 == '\0')
// {
// return 0;
// }
// str1++; str2++;
// }
// return *str1 -* str2;
//}
//int main()
//{
// char arr1[] = "abcde";
// char arr2[] = "abcdf";
// printf("%d\n", my_strcmp(arr1, arr2));
//}//模拟实现strncat 不会追加、0
//char* strncat(char* destination, const char* source, size_t num);//char* my_strncpy(char* destination, const char* source, unsigned int number)
//{
// assert(destination && source);
// char* strat = destination;
// while(*strat)
// {
// strat++;
// }
// for (int i = 0; i < number; i++)
// {
// *strat = *source;
// }
// return destination;
//}
//int main()
//{
// char arr1[50] = "abcd";
// char arr2[] = "ef";
// printf("%s\n", my_strncpy(arr1, arr2,1));
//}//int main()
//{
// char arr1[50] = "abcd";
// char arr2[] = "ef";
// strncat(arr1, arr2, 1);
//}//模拟strncpy 不会复制、0
//char* strncpy(char* destination, const char* source, size_t num);//char* my_strncpy(char* destination, const char* source, int number)
//{
// assert(destination && source);
// char* start = destination;
// int count = 1;
// while (*source )
// {
// *start = *source;
//
// if (count == number)
// return destination;
//
// count++;
// start++; source++;
// }
// return destination;
//}
//int main()
//{
// char arr1[] = "cbcd";
// char arr2[] = "abcd";
// printf("%s\n", my_strncpy(arr1, arr2, 3)); //abcd
//
//}//模拟strncat 不会、0
//char* strncat(char* destination, const char* source, size_t num);
//char* my_strncat(char* destination, const char* source, unsigned int number)
//{
// assert(destination && source);
// char* start = destination;
// while (*start)
// {
// start++;
// }
// int count = 0;
// while (*source)
// {
// *start = *source;
// count++;
// if (count == number)
// {
// return destination;
// }
// start++; source++;
// }
// return destination;
//
//}
//int main()
//{
// char arr1[20] = "abcd";
// char arr2[] = "efghi";
// printf("%s\n", my_strncat(arr1, arr2, 3));
//}//int main()
//{
// char arr1[20] = "abcd";
// char arr2[] = "efghi";
// strncat(arr1, arr2, 3);
//}//模拟 strncmp
//int strncmp(const char* str1, const char* str2, size_t num);//int my_strncmp(const char* str1, const char* str2, unsigned int number)
//{
// int count = 1;
// while (*str1 == *str2)
// {
// if (*str1 == '\0')
// {
// return 0;
// }
// str1++; str2++;
// count++;
// if (count == number)
// return 0;
// }
// return *str1 - *str2;
//}
//int main()
//{
// char arr1[] = "abcde";
// char arr2[] = "abcdr";
// printf("%d\n", my_strncmp(arr1, arr2, 4));
//}//模拟strstr
//const char* strstr(const char* str1, const char* str2);
//char* strstr(char* str1, const char* str2); C语言只支持这个
//char* my_strstr(char* str1, const char* str2)
//{
// assert(str1 && str2);
// char* p = str1;
// char* a = NULL;
// char* b = NULL;
//
// while (*p)
// {
// a = p;
// b = str2;
// while (*a++ == *b)
// {
// b++;
// }
//
// if (*b == '\0')
// return (char* )p;
// if (*a == '\0')
// {
// return NULL;
// }
// p++;
// }
//}
//int main()
//{
// char arr1[] = "abcdabcdffff";
// char arr2[] = "dab";
// char* ret = my_strstr(arr1, arr2);
// if (ret)
// printf("找到了%s\n", ret);
// else
// printf("NO\n");
//}
其实只有strcpy会加上要拷贝字符串的\0,你发现了吗
【C语言】strlen,str(n)cmp,str(n)cpy,str(n)cat,strstr库函数的代码实现相关推荐
- C语言 strlen(str)和sizeof(arr)的区别
C语言 strlen(str)和sizeof(arr)的区别 1. strlen() strlen(str):表示是运算符,而不是一个函数.sizeof返回的值表示的含义如下: 该函数实际完成的功能是 ...
- C语言strlen()函数用法
C语言strlen()函数:返回字符串的长度 头文件:#include <string.h> strlen()函数用来计算字符串的长度,其原型为:unsigned int strlen ( ...
- 【str家族】如何使用处理字符和字符串的库函数
本文收录于专栏:C语言进阶 关注作者,持续阅读作者的文章,学习更多知识! https://blog.csdn.net/weixin_53306029?spm=1001.2014.3001.5343 C ...
- 切割字符串长度php,C++_C语言中计算字符串长度与分割字符串的方法,C语言strlen()函数:返回字符串 - phpStudy...
C语言中计算字符串长度与分割字符串的方法 C语言strlen()函数:返回字符串的长度头文件: #include strlen()函数用来计算字符串的长度,其原型为: unsigned int str ...
- matlab中str_,str编程中是啥意思 str在程序中什么意思
在编程中char是什么意思? 在编程中char是申明一个字符型变量的语句.比如 char str 这样申明后,str就表示是一个长度为一个字节的字符变量.在C语言中一般表示是一个字符,但在C51中,也 ...
- C语言strlen函数详解
strlen函数详解 一.strlen函数简介 1.函数原型 2.注意事项 二.strlen函数模拟实现 1.计数器方式 2.递归实现 3.指针-指针实现 一.strlen函数简介 1.函数原型 si ...
- c语言strlen作业,C语言 strlen()用法及代码示例
strlen()函数计算给定字符串的长度.strlen()函数在string.h头文件中定义.它不计算空字符" \ 0". 用法: int strlen(const char *s ...
- c语言strlen函数的原型及用法
原型 unsigned int strlen(const char *str); 用法 #include<stdio.h> #include<string.h>int main ...
- C语言strlen函数的模拟实现
目录 使用计数方法实现strlen函数的模拟实现 使用递归的方式去实现 使用指针的方式去模拟实现strlen 使用计数方法实现strlen函数的模拟实现 在这里有一个assert函数这是断言,防止空指 ...
最新文章
- 61条面向对象设计的经验原则
- 2017年10月07日普及组 数列
- hadoop yarn集群HA安装及配置
- 字符集和编码规范:ASCII,Unicode和UTF-8, latin1,BIG5,GBK
- 【愚人节快乐】拥抱Bootstrap,FineUI新版效果超炫!
- 回顾云计算项目的得与失
- 关于MSDTC - 与基础事务管理器的通信失败 错误解决的小备忘
- 《富爸爸穷爸爸》第一课
- uni-app使用countdown插件实现倒计时
- problem solving automation
- 手把手教你使用NBS
- Linux系统日志rsyslogd
- 五子棋(C++面向对象实现)
- 联通服务器调试信号,云服务器 联通网络设置方法
- MJ上下拉刷新的使用方法 -2018.9.29
- history of program atan2(y,x)和pow(x,y)
- 消防隐患同比下降约60%,基于物联网大数据的智慧消防水系统远程监测方案
- 【Linux】bin结尾的安装包
- 一分钟带你读懂什么是堆?
- 启动springBoot,使用h2内嵌数据库,修改hibernate方言