文章目录

  • 字符串特性
  • 转义字符
  • 模拟实现strcpy
  • 模拟实现strcat
  • 模拟实现strstr
  • 模拟实现strchr
  • 模拟实现strcmp
  • 模拟实现memcpy
  • 模拟实现memmove
  • 模拟实现strncpy
  • 模拟实现strncat
  • 模拟实现strncmp

字符串特性

"hello bit.\n"
  1. 这种由双引号引起来的一串字符称为字符串字面值,或者简称字符串。
  2. 不存在字符串类型,只有char字符类型不存在字符串类型,只有char字符类型。
  3. 字符串以隐藏的\0作为结束标志。
  4. 求字符串长度sizeof();,比如sizeof("abc"),结果就是4,因为还有字符字符结束标志0

转义字符

问题
在屏幕上打印出My English name is "xiaosan"

#include<stdio.h>
#include<stdlib.h>
int main()
{printf("My English name is \"xiaosan\"\n");system("pause");return 0;
}

在字符串中的"前必须加上\,才能达到预期效果,\的功能就是转义,顾名思义就是转变它默认的含义。聪明的你肯定也看到了\n,没错\n也是转义字符。

常见的转义字符及其含义

模拟实现strcpy

#include<stdio.h>
#include<Windows.h>
#include<assert.h>
char* my_strcpy(char* dest, const char* src)
{char* ret = dest;assert(dest);assert(src);while ((*dest++ = *src++)){;}return ret;
}
int main()
{char a1[50];char a2[] = { "哈哈哈!" };my_strcpy(a1, a2);printf("%s\n", a1);return 0;
}

模拟实现strcat

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<windows.h>
#include<assert.h>
char* my_strcat(char* dest,const char* src)
{char*ret=dest;assert(dest);assert(src);while(*dest){*dest++;}while((*dest++=*src++)){;}return ret;
}
int main()
{char a1[50]={"我是一个小笨蛋!!!"};char a2[]={"对,你就是小笨蛋!!!"};my_strcat(a1,a2);printf("%s\n",a1);system("pause");return 0;
}

模拟实现strstr

#include <stdio.h>
#define pragma warning:4996
#include<Windows.h>
#include<assert.h>const char *my_strstr(const char*str1, const char *str2)
{assert(str1);assert(str2);const char*cp = (char*)str1;const char*substr = (char*)str2;const char*s1 = NULL;if (*str2 == '\0')return NULL;while (*cp){s1 = cp;substr = str2;while (*s1&&*substr && (*s1 == *substr)){s1++;substr++;}if (*substr == '\0')return cp;cp++;}return NULL;
}//const char *my_strstr(const char *str, const char *sub_str)
//{//  for (int i = 0; str[i] != '\0'; i++)
//  {//      int tem = i; //tem保留主串中的起始判断下标位置
//      int j = 0;
//      while (str[i++] == sub_str[j++])
//      {//          if (sub_str[j] == '\0')
//          {//              return &str[tem];
//          }
//      }
//      i = tem;
//  }
//
//  return NULL;
//}int main()
{char *s = "1233345hello";char *sub = "345";printf("%s\n", my_strstr(s, sub));system("pause");return 0;
}

模拟实现strchr

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<Windows.h>
#include<assert.h>
char *my_strchr(char *s, char c)
{assert(s);while (*s != !'\0'&&*s!= c){ ++s;}return *s == c ? s : NULL;
}
int main()
{char* tmp = 0;char string[] = { "I love studying " };char c = 's';tmp=my_strchr(string, c);printf("%s", tmp);system("pause");return 0;
}

模拟实现strcmp

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<Windows.h>
int my_strcmp(char*src, char*dest)
{int ret = 0;while (!(ret = *(unsigned char*)src - *(unsigned char*)dest) && *dest)++src , ++dest;if (ret < 0)ret = -1;else if (ret>0)ret = 1;return ret;
}
int main()
{char str1[12] = "I love zou!";char str2[13]= "I love zhou!";printf("%d\n", my_strcmp(&str1, &str2));system("pause");return 0;
}

模拟实现memcpy

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<Windows.h>
void* my_memcpy(void* dest, const void* src, size_t count)
{void *ret = dest;while (count--){*(char*)dest = *(char*)src;dest = (char*)dest + 1;src = (char*)src + 1;}return ret;
}
int main()
{char mem1[30] = { "This a memcpy test!" };char mem2[30] = { 0 };int i = 0;my_memcpy(mem2, mem1, 20);for (i=0; i < 30; i++){printf("%c", mem2[i]);}system("pause");return 0;
}

模拟实现memmove

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<Windows.h>
void*my_memmove(void*dest,const void*src,size_t count)
{char*ret = (char*)dest;if (dest <= src || (char*)dest >= (char*)src + count){while (count--){*(char*)dest = *(char*)src;dest = (char*)dest + 1;src = (char*)src + 1;}}else{dest = (char*)dest + count - 1;src = (char*)src + count - 1;while (count--){*(char*)dest =*(char*) src;dest = (char*)dest - 1;src = (char*)src - 1;}}return ret;
}
int main()
{int arr1[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };int arr2[10] = { 0 };int i = 0;my_memmove(arr2,arr1,40);for (; i < 10; i++){printf("%d,", arr2[i]);}printf("\n");system("pause");return 0;
}

模拟实现strncpy

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<windows.h>
#include<assert.h>
char* my_strncpy(char*dest,const char*src,size_t num)
{char* ret=dest;unsigned int i=0;assert(dest);assert(src);for(i=0;i<num;i++){*dest++=*src++;}return ret;
}
int main()
{char s1[50]="I don't want to break!!!";char s2[]="But vacation is coming!!!";my_strncpy(s1,s2,40);system("pause");return 0;
}

模拟实现strncat

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<windows.h>
#include<assert.h>
char* my_strncat(char* dest,const char* src,size_t num)
{char* ret=dest;unsigned int i=0;assert(dest);assert(src);while(*dest){dest++;}for(i=0;i<num;i++){*dest++=*src++;}return ret;
}
int main()
{char s1[100]="I don't want to break!!!";char s2[]="But the vacation is coming!!!";my_strncat(s1,s2,50);system("pause");return 0;
}

模拟实现strncmp

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<Windows.h>
#include<assert.h>
int my_strncmp(char*s1, char*s2, size_t n )
{assert(s1);assert(s2);int tmp=0;int count=0;tmp = ((*((int*)s1) - *((int*)s2)) && (s1++) && (s2++)&&((count++)<((int*)n)));if (tmp>0)return 1;else if (tmp < 0)return -1;elsereturn 0;
}
int main()
{int tmp;char str1[] = { "This a test for strncmp!" };char str2[] = { "This a test for strcmp!" };tmp=my_strncmp(str1, str2, 10);printf("%d\n", tmp);system("pause");return 0;
}

字符串函数的模拟实现相关推荐

  1. C语言函数: 字符串函数及模拟实现strtok()、strstr()、strerror()

    C语言函数: 字符串函数及模拟实现strtok().strstr().strerror() strstr()函数: 作用:字符串查找.在一串字符串中,查找另一串字符串是否存在. 形参: str2在st ...

  2. 【C语言详解】——常见字符和字符串函数及其模拟实现

    本文主要介绍一些常见的字符和字符串函数及其模拟实现 所需要的头文件 #include<string.h> 目录 1.求字符串长度 strlen 1.1模拟实现 strlen(三种方法) 2 ...

  3. C语言常用字符串函数及模拟实现

    字符串函数总结及模拟实现 1. 字符串函数总结

  4. 基础字符串函数及其模拟实现

    字符串函数 strlen函数

  5. 【C语言】 strstr查找子字符串函数以及模拟实现讲解

    strstr 字符串查找函数 返回的是相同子串的第一个出现的的地址   返回类型是 char* 返回的是相同子串的第一个出现的的地址   参数是 const char* str1 ,const cha ...

  6. 【c语言】模拟实现字符串函数(上)

    关关难过关关过 前路漫漫亦灿烂 今天 阿紫 就带领大家一起挑战字符串函数的模拟实现 目录 1.模拟实现strlen 1.1函数介绍 1.2函数的模拟实现 2.模拟实现strcpy 2.1函数介绍 2. ...

  7. 关于c语言字符串函数和一些内存函数的的简介

    关于c语言字符串函数和一些内存函数的的简介 求字符串长度的函数 strlen函数介绍![在这里插入图片描述](https://img-blog.csdnimg.cn/20190301142458376 ...

  8. 模拟实现常用字符串函数

    1.查找子字符串函数strstr的实现char * my_strstr(const char * dest, const char * src)//const保护字符串不被更改 {assert(des ...

  9. 字符函数、字符串函数、内存函数用法及其模拟实现

    目录 1.strlen strlen的模拟实现 2.strcpy strcpy模拟实现 3.strcat - 字符串追加 模拟实现strcat 4.strcmp - 比较字符串 模拟实现stcmp 5 ...

  10. 【C语言进阶】字符串函数模拟实现

    求字符串长度 strlen size_t strlen(const char*string); 头文件:<string.h> 功能: 计算字符串的长度,遇到'\0'便停止,统计'\0'之前 ...

最新文章

  1. 在Eclipse中使用Maven 2.x指南
  2. python实现pdf转excel_python pdf转Excel
  3. servlet中getWriter和getOutputStream的区别
  4. 内存缓存MemoryCache
  5. 计划得一步一步实施,题库首先是第一步!
  6. javascript中依赖属性(Dependency Property)的实现
  7. python discuz搜索api_Django用内置方法实现简单搜索功能的方法
  8. java中的垃圾收集器_Java中的垃圾收集
  9. FISCO BCOS Solidity 智能合约 返回数组
  10. 程序员需要了解依赖冲突的原因以及解决方案
  11. GLFWError #65542 Happen, WGL: The driver does not appear to support OpenGL的问题处理经历
  12. 视频播放器(二):视频解码
  13. jupyter notebook把txt文件写成所需格式的txt文件
  14. Deep_Learn关于数组和数的操作
  15. 梯形图调用c语言编写程序,简单使用C语言写梯形图精简V2.0.pdf
  16. CSS Display与Visibility区别和用法
  17. 【Numpy】多维度切片截取
  18. Python-音乐播放器APP制作
  19. 登录提示:You are required to change your password immediately (password aged)
  20. Matter协议特性解析(二) 分身(Multiple Fabiric)和权限控制

热门文章

  1. Photoshop-图层相关概念-LayerComp-Layers-移动旋转复制图层-复合图层
  2. 设计模式---004策略模式(转载自我的老师 Alley-巷子)
  3. 湖南大学计算机考研复习资料
  4. linux top命令看到的实存(RES)与虚存(VIRT)分析
  5. diybox路由器设置教程_图文教程:家用无线路由器设置 | 192路由网
  6. RxSwift 学习笔记
  7. 什么是 HTTP Headers?
  8. BOMAPI和DOMAPI
  9. 餐厅点菜管理系统C语言课程设计
  10. sklearn 使用make_blobs生成聚类样本数据