IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C语言自我实现函数atoi、itoa 、memcpy -> 正文阅读

[C++知识库]C语言自我实现函数atoi、itoa 、memcpy

atoi、itoa

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <assert.h>

int myatoi(const char * str)
{
	int i = 0;
	int tmp = 0;
	int flag = 1;
	
	assert(str != NULL);

	//如果是前面有空格先消去
	while (isspace(*str)){	//用函数isspace判断是否为空白字符
		str++;
	}
	if(*str == '-'){
		flag = -1;
		str++;
	}
	while(*str != '\0'){
		if(*str > 57 || *str < 48) return -1;
		str++;
		i++;
	}
	if(i != 0){
		str -= i;
	}
	while(*str != '\0'){
		tmp = tmp*10+(*str -'0');//0-48
		str++;	
		i++;
	}
	return tmp*flag;
}
void  myitoa(int n,char *str) 
{
	char *head = str;
	char ch;
	int i=0,j=0;
	while(n != 0){
		*str = n%10 +'0';
		n /= 10;
		j++;
		str++;
	}
	str--;
	while(head < str){
		ch = *head;
		*head++ = *str;
		*str-- = ch;
		i++;
	}
	//printf("head  %s\n",head);
	//printf("str  %s\n",str);
	str += i+1;
	*str = '\0';

}

int main()
{
	int i;
	char *c = "   -123456";
	char *k = NULL;
	char *m = "dfdfg";
	i = myatoi(m);
	printf("%d\n",i);
	int b = 123456789;
	char str[32];
	myitoa(b,str);
	printf("%s\n",str);

	return 0;
}

memcpy

void *mymemcpy(void *dest, const void *src, int count)
{
void *ptr = dest;
if (NULL == dest || NULL == src || count <= 0)
return NULL;
 
while (count--)
*(char *)dest++ = *(char *)src++;
 
return ptr;
}

由于拷贝是从低地址开始,按字节进行拷贝的,需要考虑内存重叠:

void *memcpy(void *dest, const void *src,size_t n)
{
if(dest==NULL||src==NULL)
    return NULL;
void *res = dest;
if(dest<=src||(char*)dest>=(char*)src+n){
        while(n--){
//从低地址开始复制
        *(char*)dest =*(char*)src;
        dest=(char*)dest+1;
        src=(char*)src+1;
        }
}
else{
//从高地址开始复制
      src = (char*)src + n -1;
      dst = (char*)dst + n -1;
      while(n--){
            *(char*)dst = *(char*)src;
            dst = (char*)dst -1;
            src = (char*)src -1;
          }
    }
return res;
}

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-10-15 11:36:23  更:2021-10-15 11:38:49 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 3:56:39-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码