仿写各种字符串操作函数
来源:互联网 发布:群众网络安全保密 编辑:程序博客网 时间:2024/05/16 00:38
一、头文件:String.h
#ifdef __STRING_H__#define __STRING_H__#endifchar *my_strcpy(char*arr,const char*arr1);//字符串复制char *my_strcat(char*arr,const char*arr1);//字符串拼接char *my_strstr(const char*arr,const char*arr1);//子串查找,有返回查找的字串到结束const char *my_strchr(const char*arr,const char arr1);//字符查找,有返回此字符地址,无返回NULLint my_strcmp(const char*arr,const char*arr1);//字符串比较char *my_memcpy(void *arr,void *arr1,int count);//字符串复制,内存复制char *my_memmove(void *arr,void *arr1,int count);//字符串复制,内存复制,避免内存重叠
二、实现函数:String.c
#include<stdio.h>#include<assert.h>char *my_strcpy(char*arr,const char*arr1)//字符串复制{ char *str=arr;//返回地址,便于链式反应 assert(arr); assert(arr1); while(*arr++ = *arr1++);//将'\0'也要复制 return str;}char *my_strcat(char*arr,const char*arr1)//字符串拼接{ char *str=arr; assert(arr); assert(arr1); while(*arr++); arr--;//跳出上一个循环时,已指向'\0'的下一个地址 while(*arr++ = *arr1++);//覆盖掉原有'\0',将arr1全接在arr后 return str;}char *my_strstr( char*arr,const char*arr1)//子串查找{ assert(arr); assert(arr1); if(*arr1=='\0')//arr1只有一个'\0','\0'不比较 return NULL; while(*arr) { //q从第一个字符开始比较,连续相同至'\0'则找到,否则q重新开始,p从当前位置继续比较 const char *p=arr;//保存当前arr的位置 const char *q=arr1;//arr1从第一个字符开始 while(*q) { if(*p&&*p==*q)//判断是否相同,且不为'\0' { q++; p++; } else//不同退出q重新开始,或结束 break; } if(*q=='\0')//找到结束 { return arr; } else//未结束,arr进行下个字符比较,arr1重新开始 arr++; }//遍历至arr的'\0'则未找到 return NULL;}int my_strcmp(const char*arr,const char*arr1)//字符串比较{ assert(arr); assert(arr); while(*arr&&arr1)//都不为'\0' { if(*arr>*arr1) return 1; else if(*arr<*arr1) { return -1; } arr++;arr1++; } if(*arr==0 && *arr1==0)//都比较结束,相等 return 0; if(*arr)//arr长则大 return 1; else //否则小 return -1;}const char* my_strchr(const char*arr, const char arr1)//字符查找{ assert(arr); assert(arr1); while(*arr){ if(*arr == arr1) return arr; arr++; } return NULL;}char *my_memcpy(void *arr,void *arr1,int count)//字符串复制,内存复制{ void* str = arr;//保留起始地址 assert(arr); assert(arr1); while(count--) { *(char*)arr = *(char*)arr1; arr=(char*)arr+1; arr1=(char*)arr1+1; }//跳出时指向复制字符串的下一个字符 return (char*)str;//输出复制后的结果}char *my_memmove(void *arr,void *arr1,int count)//字符串复制,内存复制,避免内存重叠{ void *str=arr; assert(arr); assert(arr1); if(arr<=arr1||(char*)arr>=((char*)arr1+count))//arr在arr1之前或arr在arr1+count之后,直接复制 { while(count--) { *(char*)arr=*(char*)arr1; arr=(char*)arr+1; arr1=(char*)arr1+1; } } else//后往前复制,有内存重叠 { arr=(char*)+count; arr1=(char*)+count; while(count--) { *(char*)arr=*(char*)arr1; arr=(char*)arr-1; arr1=(char*)arr1-1; } } return (char*)str;}
三、使用函数:main.c
#include<stdio.h>#include<stdlib.h>#include"String.h"int main(){ char arr[20]="abc123"; char arr1[]="456def"; //my_strcpy(arr,arr1); printf("%s \n",arr); my_strcat(arr,arr1); printf("%s \n",arr); printf("%s \n",my_strstr(arr,"56")); printf("%d \n",my_strcmp(arr,arr1)); printf("%s\n",arr); printf("%p \n",strchr(arr,'2')); printf("%p \n",my_strchr(arr,'2')); printf("%s\n",arr); printf("%s\n", my_memcpy(arr, "987", 4)); printf("%s \n",my_memmove(arr,"456",3)); system("pause"); return 0;}
阅读全文
0 0
- 仿写各种字符串操作函数
- C函数仿写 JAVA::String操作
- 自写字符串操作函数
- 各种字符串操作函数的实现
- 仿写strcmp函数
- Exe8 自己写的字符串操作函数
- 3.2字符串-各种字符串操作函数的实现
- 仿写c字符串库函数
- C语言常用的各种操作字符串的函数
- 字符串的各种操作
- 字符串的各种操作
- 字符串的各种操作
- 字符串的各种操作
- 各种字符串拆分函数
- 各种字符串Hash函数
- 各种字符串拆分函数
- 各种字符串HASH函数
- 各种字符串Hash函数
- CAN总线负载率原理及计算
- Linux的opencv教程之安装与配置+cmake编译
- Intellij IDEA 报错java.lang.NoClassDefFoundError
- sql2017111705
- markdown语法教学(for萌新版)
- 仿写各种字符串操作函数
- 10. 计算WPL
- Objective-C Category 的实现原理
- Scala元组和映射
- Meteor 安装orHelloWork win10
- git基本
- 机器学习基石-10-4-Gradient Descent
- UML类图五种关系与代码的对应关系
- DataTable异步获取 实现行点击并跳转