一:实现atoi函数

 1 #include<iostream>
2
3 using namespace std;
4
5 int atoi_my(const char *str)
6 {
7 int s=0;
8 bool falg=false;
9
10 while(*str==' ')
11 {
12 str++;
13 }
14
15 if(*str=='-'||*str=='+')
16 {
17 if(*str=='-')
18 falg=true;
19 str++;
20 }
21
22 while(*str>='0'&&*str<='9')
23 {
24 s=s*10+*str-'0';
25 str++;
26 if(s<0)
27 {
28 s=2147483647;
29 break;
30 }
31 }
32 return s*(falg?-1:1);
33 }

二、实现strcpy函数:char *strcpy(char *dst, const char *src);

  如果不考虑内存重叠:

1 char*  strcpy(char* dst,const char* src)
2 {
3 assert(dst!=NULL&&src!=NULL);
4 char* res=dst;
5 while((*dst++=*src++)!='\0') ;
6 return res;
7 }

上面的实现没有考虑内存重叠,调用 char str[10]="abc";  my_strcpy(str+1,str);  会出错。然而调用系统的strcpy函数程序正常运行,打印str结果为“aabc”!可见系统strcpy函数的实现不是这样的。

strcpy的正确实现应为:

1 char *my_strcpy(char *dst,const char *src)
2 {
3 assert(dst != NULL);
4 assert(src != NULL);
5 char *ret = dst;
6 memcpy(dst,src,strlen(src)+1);
7 return ret;
8 }

memcpy函数实现时考虑到了内存重叠的情况,可以完成指定大小的内存拷贝,函数memcpy函数的实现:

 1 void * my_memcpy(void *dst,const void *src,unsigned int count)
2 {
3 assert(dst);
4 assert(src);
5 void * ret = dst;
6 if (dst <= src || (char *)dst >= ((char *)src + count))//源地址和目的地址不重叠,低字节向高字节拷贝
7 {
8 while(count--)
9 {
10 *(char *)dst = *(char *)src;
11 dst = (char *)dst + 1;
12 src = (char *)src + 1;
13 }
14 }
15 else //源地址和目的地址重叠,高字节向低字节拷贝
16 {
17 dst = (char *)dst + count - 1;
18 src = (char *)src + count - 1;
19 while(count--)
20 {
21 *(char *)dst = *(char *)src;
22 dst = (char *)dst - 1;
23 src = (char *)src - 1;
24 }
25 }
26 return ret;
27 }

三、strcat函数的实现:

1 char *strcat(char *str1, const char *str2)
2 {
3 assert((str1!=NULL)&&(str2!=NULL)) ;
4 char *pt = str1;
5 while(*str1!='\0') str1++;
6 while(*str2!='\0') *str1++ = *str2++;
7 *str1 = '\0';
8 return pt;
9 }

手写atoi、strcpy、strcat的更多相关文章

  1. opencv 手写选择题阅卷 (三)训练分类器

    opencv 手写选择题阅卷 (三)训练分类器 1,分类器选择:SVM 本来一开始用的KNN分类器,但这个分类器目前没有实现保存训练数据的功能,所以选择了SVN分类器; 2,样本图像的预处理和特征提取 ...

  2. c++后台开发面试常见知识点总结(六)算法手写

    链表倒转  leetcode-206 连续子数组最大和问题(和最大的连续子序列的和)   leetcode-53 输出字符串中最长的回文子串长度?  leetcode-5 一个字符串,求最长无重复子串 ...

  3. 基于opencv的手写数字识别(MFC,HOG,SVM)

    参考了秋风细雨的文章:http://blog.csdn.net/candyforever/article/details/8564746 花了点时间编写出了程序,先看看效果吧. 识别效果大概都能正确. ...

  4. 字符串操作函数<string.h>相关函数strcpy,strcat,等源码。

    首先说一下源码到底在哪里找. 我们在文件中包含<cstring>时,如果点击右键打开文档, 会打开cstring,我们会发现路径为: D:\Program Files\visual stu ...

  5. 简单HOG+SVM mnist手写数字分类

    使用工具 :VS2013 + OpenCV 3.1 数据集:minst 训练数据:60000张 测试数据:10000张 输出模型:HOG_SVM_DATA.xml 数据准备 train-images- ...

  6. matlab手写神经网络实现识别手写数字

    实验说明 一直想自己写一个神经网络来实现手写数字的识别,而不是套用别人的框架.恰巧前几天,有幸从同学那拿到5000张已经贴好标签的手写数字图片,于是我就尝试用matlab写一个网络. 实验数据:500 ...

  7. 【Win 10 应用开发】手写识别

    记得前面(忘了是哪天写的,反正是前些天,请用力点击这里观看)老周讲了一个14393新增的控件,可以很轻松地结合InkCanvas来完成涂鸦.其实,InkCanvas除了涂鸦外,另一个大用途是墨迹识别, ...

  8. JS / Egret 单笔手写识别、手势识别

    UnistrokeRecognizer 单笔手写识别.手势识别 UnistrokeRecognizer : https://github.com/RichLiu1023/UnistrokeRecogn ...

  9. 如何用卷积神经网络CNN识别手写数字集?

    前几天用CNN识别手写数字集,后来看到kaggle上有一个比赛是识别手写数字集的,已经进行了一年多了,目前有1179个有效提交,最高的是100%,我做了一下,用keras做的,一开始用最简单的MLP, ...

随机推荐

  1. 【小白学PyTorch】21 Keras的API详解(下)池化、Normalization层

    文章来自微信公众号:[机器学习炼丹术].作者WX:cyx645016617. 参考目录: 目录 1 池化层 1.1 最大池化层 1.2 平均池化层 1.3 全局最大池化层 1.4 全局平均池化层 2 ...

  2. ASP.Net Core3.1 生成二维码填坑

    ASP.Net Core3.1 使用QrCode生成二维码 部署到Linux报错 The type initializer for 'System.DrawingCore.GDIPlus' threw ...

  3. day54 Pyhton 前端JS06

    内容回顾 - ECMAScript5.0 基础语法 - var 声明变量 - 五种基本数据类型 - string - number NaN number 1 number - boolean - un ...

  4. day08 Pyhton学习

    一.昨日内容回顾 .1.基础部分的补充 join()  把列表变成字符串, 拼接 split() 切割 删除: 列表和字典不能在循环的时候进行删除. 把要删除的内容记录在一个新列表中,然后循环新列表, ...

  5. 【C语言程序设计】小游戏之俄罗斯方块(二)!适合初学者上手、练手!

    第二篇,主要实现俄罗斯方块中的主体部分,包括容器的数据结构以及容器的相关操作,特别是大方块和容器之间的交互逻辑,包括碰撞检测,消除检测等等. 1. 容器的表示 大方块的实现涉及到位运算,而容器同样如此 ...

  6. 【转载】动态规划—各种 DP 优化

    原博客地址 关于氵博客:其实主要是防止我找不到这篇文了

  7. wifi - 攻击环境准备

    1.Windows 环境准备 对于Windows系统,只需要Windows XP SP2以上就行了,安装对应网卡驱动 2.Linux 环境准备 绝大多数黑客会选择Linux作为测试平台,因为绝大多数无 ...

  8. 【Flutter 混合开发】与原生通信-MethodChannel

    Flutter 混合开发系列 包含如下: 嵌入原生View-Android 嵌入原生View-iOS 与原生通信-MethodChannel 与原生通信-BasicMessageChannel 与原生 ...

  9. 如果只推荐一本 Python 书,我要 Pick 它!

    今年二月初,我偶然看到了一条推特: <流畅的Python>一书的作者发布了一条激动人心的消息:他正在写作第二版! 如果要票选最佳的 Python 进阶类书目,这本书肯定会是得票率最高的书籍 ...

  10. git学习(十一) idea git pull 解决冲突

    测试如下: 先将远程的代码修改,之后更新: 之后将工作区修改的代码(这里修改的代码跟远程修改的位置一样)提交到本地,之后拉取远程的代码,会发现有冲突: Accept Yours 就是直接选取本地的代码 ...