#include<stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#include <math.h> char *Mystrstr(const char *string, const char *strCharSet)
{
if (NULL == string)
{
return (char *)string;
}
if (NULL == strCharSet)
{
return NULL;
}
int nLen1 = strlen(string);
int nLen2 = strlen(strCharSet); for (int i = ; i < nLen2; i++)
{
for (int j = ; j <nLen1; j++)
{
if (strCharSet[i] == string[j])
{
int nPos = j;
while ( (i < nLen2) &&(strCharSet[i] == string[j]))
{
i++;
j++;
}
if (i == nLen2)
{
return (char *)&string[nPos];
}
i = nPos;
}
}
}
return NULL;
} char *Mystrcpy( char *strDestination, const char *strSource )
{
if (strDestination == NULL && strDestination == NULL)
{
exit();
} while (*strSource != '\0')
{
*strDestination++ = *strSource++;
}
*strDestination = '\0';
return strDestination;
} void *Mymemset( void *dest, int c, size_t count )
{
char *pszDest = (char *)dest;
if (pszDest == NULL)
{
exit();
}
if ( == count)
{
return dest;
}
for (size_t i = ; i < count; i++)
{
*pszDest++ = c;
}
return dest;
} void* MyMemcpy( void *dest, const void *src, int nCount )
{
if (NULL == dest || src == NULL)
{
return NULL;
}
char *pszDest = (char *)dest;
const char *pszSrc = (char *)src; if (pszDest > pszSrc && pszDest < pszSrc + nCount)
{//有重复(pszDest的位置 在pszSrc里面)
for (int i = nCount - ; i >= ; i--)
{//从后往前拷贝
pszDest[i] = pszSrc[i];
}
}
else
{
for (int i = ; i < nCount; i++)
{
pszDest[i] = pszSrc[i];
}
}
return dest;
} double Myatof( const char *string )
{
bool IsNegative = false;
bool IsInt = true;
double dblResult = ;
int i = ;
while (*string != '\0')
{
switch(*string) {
case ' ':
string++;
break;
case '-':
IsNegative = true;
string++;
break;
case '+':
IsNegative = false;
string++;
break;
case '.':
IsInt = false;
string++;
break;
default:
if (IsInt)
{
dblResult = dblResult* + (*string - '');
string++;
}
else
{
dblResult += (*string - '') / pow(, i++);
string++;
}
break;
}//end_of_switch }//end_of_while return IsNegative? -dblResult : dblResult;
} int main()
{
char szBuf[];
memset(szBuf, , sizeof(szBuf));
for (int i = ; i < ; i++)
{
szBuf[i] = 'a' + i;
}
MyMemcpy(&szBuf[], &szBuf[], );
printf("%s\n", szBuf);
return ;
}

重写strstr、strcpy、memcpy、memset、atof算法的更多相关文章

  1. C++语法之-------strcpy,memcpy,memset

    1.strcpy 原型:extern char *strcpy(char *dest,char *src); 用法:#i nclude 功能:把src所指由NULL结束的字符串复制到dest所指的数组 ...

  2. strcpy, memcpy, memset函数

    一. strcpy函数 原型声明:char *strcpy(char* dest, const char *src);   头文件:#include <string.h> 和 #inclu ...

  3. strcpy,memcpy,memset函数实现

    strcpy 实现,只能拷贝字符串 char* strcpy(char* des,const char* source) { char* r=des; assert((des != NULL) &am ...

  4. [VC]strcpy memcpy memset区别与简介

    strcpy 原型:extern char *strcpy(char *dest,char *src); 用法:#include <string.h> 功能:把src所指由NULL结束的字 ...

  5. memmove、memcpy、strcpy、memset的实现

    memmove.memcpy.strcpy.memset 原型为: void *memmove( void* dest, const void* src, size_t count ); char*  ...

  6. c/c++ 常见字符串处理函数总结 strlen/sizeof strcpy/memcpy/strncpy strcat/strncat strcmp/strncmp sprintf/sscanf strtok/split/getline atoi/atof/atol

    这里总结工作中经常用到的一些c/c++的字符串处理方法,标黑的是使用频率较高的   1.strlen函数:计算目标字符串长度,    格式:strlen(字符指针指向区域) 注意1:①不包含字符串结束 ...

  7. 访谈将源代码的函数 strcpy/memcpy/atoi/kmp/quicksort

    一.社论 继上一次发表了一片关于參加秋招的学弟学妹们怎样准备找工作的博客之后,反响非常大.顾在此整理一下,以便大家复习.好多源自july的这篇博客,也有非常多是我自己整理的.希望大家可以一遍一遍的写. ...

  8. 面试必会函数源代码 strcpy/memcpy/atoi/kmp/quicksort

    http://blog.csdn.net/liuqiyao_01/article/details/26967813 二.stl模板函数 1.strcpy char * strcpy( char *st ...

  9. strcpy,memcpy,memmove和内存重叠分析

    一:strcpy函数用法和实现: /* GNU-C中的实现(节选): */ char* strcpy(char *d, const char *s) { char *r=d; while((*d++= ...

随机推荐

  1. .mat转成.npy文件+Python(Pytorch)压缩裁剪图片

    需求:现有数据文件V1.mat,里面包含多个数据集,现需将里面的images数据集提取出来,然后进行压缩裁剪成指定大小 V1.mat数据集目录: 1.从mat文件中提取数据(使用Python) V1. ...

  2. 【Linux】- 不可不知的小技巧

    1.Tab键:输入文件或目录名的前几个字符,然后按TAB键,如无相重的,完整的文件名立即自动在命令行出现:如有相重的,再按一下TAB键,系统会列出当前目录下所有以这几个字符开头的名字. 在命令行下,只 ...

  3. 单行文字溢出和多行文字溢出省略号显示的CSS样式

    单行文字溢出,CSS样式 <h6 style="width:70px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis ...

  4. [CLR via C#]基元类型

    一.什么是基元类型 某些数据类型如此常用,以至于许多编译器允许代码以简化的语法来操纵它们.例如,可以使用以下语法来分配一个整数: System.Int32 a = new System.Int32() ...

  5. Runtime介绍

    本文目录 1.Runtime简介 2.Runtime相关的头文件 3.技术点和应用场景 3_1.获取属性\成员变量列表 3_2.交换方法实现 3_3.类\对象的关联对象,假属性 3_4.动态添加方法, ...

  6. connectedSignal 简单使用

    import java.util.concurrent.CountDownLatch; public class CountDown { private static CountDownLatch c ...

  7. csrf漏洞攻击手段和影响详解

    针对web应用安全中csrf漏洞两种典型的攻击方式:即输入和执行,这种简单模式下的攻击手段以及中途包含确认页面的攻击方法. 图解什么是csrf漏洞 我们先进行约束,比如存在csrf漏洞的网站叫webA ...

  8. Linux 文件上传Linux服务器

    进入命令行 在图形化桌面出现之前,与Unix系统进行交互的唯一方式就是借助由shell所提供的文本命令行界面(command line interface,CLI).CLI只能接受文本输入,也只能显示 ...

  9. IntellIJ IDEA 配置 Maven

    一.配置Maven环境 1.下载apache-maven文件,选择自己需要的版本 2.解压1所下载文件,E:\apache-maven-3.5.4 3.配置Maven环境变量 a. MAVEN_HOM ...

  10. Linux之根文件系统介绍与分析20160611

    说一下LINUX根文件系统的介绍与分析: 1.内核启动应用程序,首先要识别出应用程序,这时就需要文件系统来帮助内核找到对应的应用程序: 2.第一个启动的应用程序就是sbin目录下的init程序,也就是 ...