字符串函数的模拟实现
文章目录
- 字符串特性
- 转义字符
- 模拟实现strcpy
- 模拟实现strcat
- 模拟实现strstr
- 模拟实现strchr
- 模拟实现strcmp
- 模拟实现memcpy
- 模拟实现memmove
- 模拟实现strncpy
- 模拟实现strncat
- 模拟实现strncmp
字符串特性
"hello bit.\n"
- 这种由双引号引起来的一串字符称为字符串字面值,或者简称字符串。
- 不存在字符串类型,只有char字符类型不存在字符串类型,只有char字符类型。
- 字符串以隐藏的
\0
作为结束标志。 - 求字符串长度
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;
}
字符串函数的模拟实现相关推荐
- C语言函数: 字符串函数及模拟实现strtok()、strstr()、strerror()
C语言函数: 字符串函数及模拟实现strtok().strstr().strerror() strstr()函数: 作用:字符串查找.在一串字符串中,查找另一串字符串是否存在. 形参: str2在st ...
- 【C语言详解】——常见字符和字符串函数及其模拟实现
本文主要介绍一些常见的字符和字符串函数及其模拟实现 所需要的头文件 #include<string.h> 目录 1.求字符串长度 strlen 1.1模拟实现 strlen(三种方法) 2 ...
- C语言常用字符串函数及模拟实现
字符串函数总结及模拟实现 1. 字符串函数总结
- 基础字符串函数及其模拟实现
字符串函数 strlen函数
- 【C语言】 strstr查找子字符串函数以及模拟实现讲解
strstr 字符串查找函数 返回的是相同子串的第一个出现的的地址 返回类型是 char* 返回的是相同子串的第一个出现的的地址 参数是 const char* str1 ,const cha ...
- 【c语言】模拟实现字符串函数(上)
关关难过关关过 前路漫漫亦灿烂 今天 阿紫 就带领大家一起挑战字符串函数的模拟实现 目录 1.模拟实现strlen 1.1函数介绍 1.2函数的模拟实现 2.模拟实现strcpy 2.1函数介绍 2. ...
- 关于c语言字符串函数和一些内存函数的的简介
关于c语言字符串函数和一些内存函数的的简介 求字符串长度的函数 strlen函数介绍![在这里插入图片描述](https://img-blog.csdnimg.cn/20190301142458376 ...
- 模拟实现常用字符串函数
1.查找子字符串函数strstr的实现char * my_strstr(const char * dest, const char * src)//const保护字符串不被更改 {assert(des ...
- 字符函数、字符串函数、内存函数用法及其模拟实现
目录 1.strlen strlen的模拟实现 2.strcpy strcpy模拟实现 3.strcat - 字符串追加 模拟实现strcat 4.strcmp - 比较字符串 模拟实现stcmp 5 ...
- 【C语言进阶】字符串函数模拟实现
求字符串长度 strlen size_t strlen(const char*string); 头文件:<string.h> 功能: 计算字符串的长度,遇到'\0'便停止,统计'\0'之前 ...
最新文章
- 在Eclipse中使用Maven 2.x指南
- python实现pdf转excel_python pdf转Excel
- servlet中getWriter和getOutputStream的区别
- 内存缓存MemoryCache
- 计划得一步一步实施,题库首先是第一步!
- javascript中依赖属性(Dependency Property)的实现
- python discuz搜索api_Django用内置方法实现简单搜索功能的方法
- java中的垃圾收集器_Java中的垃圾收集
- FISCO BCOS Solidity 智能合约 返回数组
- 程序员需要了解依赖冲突的原因以及解决方案
- GLFWError #65542 Happen, WGL: The driver does not appear to support OpenGL的问题处理经历
- 视频播放器(二):视频解码
- jupyter notebook把txt文件写成所需格式的txt文件
- Deep_Learn关于数组和数的操作
- 梯形图调用c语言编写程序,简单使用C语言写梯形图精简V2.0.pdf
- CSS Display与Visibility区别和用法
- 【Numpy】多维度切片截取
- Python-音乐播放器APP制作
- 登录提示:You are required to change your password immediately (password aged)
- Matter协议特性解析(二) 分身(Multiple Fabiric)和权限控制