手写atoi、strcpy、strcat
一:实现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的更多相关文章
- opencv 手写选择题阅卷 (三)训练分类器
opencv 手写选择题阅卷 (三)训练分类器 1,分类器选择:SVM 本来一开始用的KNN分类器,但这个分类器目前没有实现保存训练数据的功能,所以选择了SVN分类器; 2,样本图像的预处理和特征提取 ...
- c++后台开发面试常见知识点总结(六)算法手写
链表倒转 leetcode-206 连续子数组最大和问题(和最大的连续子序列的和) leetcode-53 输出字符串中最长的回文子串长度? leetcode-5 一个字符串,求最长无重复子串 ...
- 基于opencv的手写数字识别(MFC,HOG,SVM)
参考了秋风细雨的文章:http://blog.csdn.net/candyforever/article/details/8564746 花了点时间编写出了程序,先看看效果吧. 识别效果大概都能正确. ...
- 字符串操作函数<string.h>相关函数strcpy,strcat,等源码。
首先说一下源码到底在哪里找. 我们在文件中包含<cstring>时,如果点击右键打开文档, 会打开cstring,我们会发现路径为: D:\Program Files\visual stu ...
- 简单HOG+SVM mnist手写数字分类
使用工具 :VS2013 + OpenCV 3.1 数据集:minst 训练数据:60000张 测试数据:10000张 输出模型:HOG_SVM_DATA.xml 数据准备 train-images- ...
- matlab手写神经网络实现识别手写数字
实验说明 一直想自己写一个神经网络来实现手写数字的识别,而不是套用别人的框架.恰巧前几天,有幸从同学那拿到5000张已经贴好标签的手写数字图片,于是我就尝试用matlab写一个网络. 实验数据:500 ...
- 【Win 10 应用开发】手写识别
记得前面(忘了是哪天写的,反正是前些天,请用力点击这里观看)老周讲了一个14393新增的控件,可以很轻松地结合InkCanvas来完成涂鸦.其实,InkCanvas除了涂鸦外,另一个大用途是墨迹识别, ...
- JS / Egret 单笔手写识别、手势识别
UnistrokeRecognizer 单笔手写识别.手势识别 UnistrokeRecognizer : https://github.com/RichLiu1023/UnistrokeRecogn ...
- 如何用卷积神经网络CNN识别手写数字集?
前几天用CNN识别手写数字集,后来看到kaggle上有一个比赛是识别手写数字集的,已经进行了一年多了,目前有1179个有效提交,最高的是100%,我做了一下,用keras做的,一开始用最简单的MLP, ...
随机推荐
- 多测师讲解rf--定位元素--高级讲师肖sir
注意点: 注意点: rfbug:rf 点击勾选一个运行就运行两个出现用例执行 注释快捷键: 改字体大小: 快捷键:显示关键字信息 (ctrl+鼠标悬浮) 注解不能空格在注解 未保存提示 定位方法 : ...
- 比特币PoW
比特币区块头结构 字段 大小(Byte) 说明 nVersion 4 区块版本号,表示本区块遵守的验证规则 hashPrevBlock 32 前一区块的哈希值,使用SHA256(SHA256(父区块头 ...
- 【树形DP】BZOJ 3829 Farmcraft
题目内容 mhy住在一棵有n个点的树的1号结点上,每个结点上都有一个妹子i. mhy从自己家出发,去给每一个妹子都送一台电脑,每个妹子拿到电脑后就会开始安装zhx牌杀毒软件,第i个妹子安装时间为Ci. ...
- 【状态压缩DP】SCOI2009 围豆豆
题目大意 洛谷链接 在一个\(N×M\)的矩阵方格内分布着\(D\)颗豆子,每颗豆有不同的分值\(V_i\).游戏者可以选择任意一个方格作为起始格,每次移动可以随意的走到相邻的四个格子,直到最终又回到 ...
- centos8平台使用blkid查看分区信息
一,blkid的用途 blkid 命令是一个命令行工具,它可以显示关于可用块设备的信息 说明:刘宏缔的架构森林是一个专注架构的博客,地址:https://www.cnblogs.com/archite ...
- python 爬取链家
import json import requests from lxml import etree from time import sleep url = "https://sz.lia ...
- laravel重写
laravel location / { try_files $uri $uri/ /index.php?$query_string; } ci location / { try_files $uri ...
- Linux终端 terminal
终端 一个可以进行人机交互的界面 物理终端 设备终端:键盘.鼠标.显示器 终端类型 控制台终端: /dev/console 串行终端:/dev/ttyS# 虚拟终端:tty:teletypewrite ...
- Anderson《空气动力学基础》5th读书笔记 第1记——流动相似性
在飞机真正上天之前,我们常常需要制作出缩小版的模型放在风洞中吹呀吹,尽可能地模拟真实飞行中的参数,这时我们就需要实现流动相似性,这便是本记要讲的. 文章目录 一.流动相似性的标准 二.流动相似性的应用 ...
- Python语言应用解析,如何入门学Python?
Python在机器学习人工智能领域非常流行,可以说是算法工程师的标配编程语言.Python语言广泛应用在web开发.大数据开发.人工智能开发.机器学习.后端开发等领域之中,近几年Python语言的趋势 ...