itoa函数的实现,函数实现功能:输入一个 int 型的数据然后修改成 十六进制的字符串。 例如:  输入 100  输出 0x64

主函数:

 int main(void){
char val[];
my_atoi(val,);
printf("%s\n",val);
return ;
}

正常的情况下就是使用 传入的num 除以 16,得到余数,然后循环除。但是得到的数据是反的,所以需要再把字符串逆序一下;

char change(int num){
if(num > )
return num+'A'-;
else
return num+'';
} //颠倒数组中的元素
void swap(char* val){
char* tmp;
tmp = val;
while(*++tmp);
tmp--;
//printf("%c\n",*tmp);
//printf("%d\n",tmp-val);
while((tmp - val + ) / ){
char ch;
ch = *tmp;
*tmp = *val;
*val = ch;
tmp--;
val++;
}
}
void my_atoi(char* val,int num){
int i = ;
while(num/){
val[i] = change(num%);
num /= ;
i++;
}
val[i++] = change(num);
val[i++] = 'x';
val[i++] = '';
val[i++] = ;
//由于存入数组中的元素是倒序的,要把数组颠倒一下
swap(val);
}

上面的代码是用 指针逆序,下面用另一种方法逆序

 void swap2(char* val){
char* tmp = val;
int i = ;
int j;
while(*tmp++)
i++;
//printf("%d\n",i);
for(j = ; j < i/; j++){
char ch;
ch = val[j];
val[j] = val[i - j - ];
val[i - j - ] = ch;
}
}

  其实还有一种方法更加简便,不需要使用字符串的逆序,因为用次算法得到的数据是逆序的,所以,就想办法让字符串从最后开始输入,然后返回字符串的指针。但是有一点需要注意,首先要知道数组的长度,然后才可以得到数组的最后一个位置。所以可以在 调用此函数之前 把数组的长度赋值到数组的第一个元素里面。

 char* my_atoi2(char* val, int num){
int i = val[];
while(--i)
val++;
//printf("%c\n",*val);
*val-- = ; //由于是倒着输入,所以第一个元素应该是字符串的结束符
while(num/){
*val-- = change(num % );
num /= ;
}
*val-- = change(num%);
*val-- = 'x';
*val = '';
return val;
}

main函数修改如下:

 int main(void){
char val[];
my_atoi(val,);
printf("%s\n",val);
return ;
}

全部代码如下:

 #include <stdio.h>

 char change(int num){
if(num > )
return num+'A'-;
else
return num+'';
} //颠倒数组中的元素
void swap(char* val){
char* tmp;
tmp = val;
while(*++tmp);
tmp--;
//printf("%c\n",*tmp);
//printf("%d\n",tmp-val);
while((tmp - val + ) / ){
char ch;
ch = *tmp;
*tmp = *val;
*val = ch;
tmp--;
val++;
}
} void swap2(char* val){
char* tmp = val;
int i = ;
int j;
while(*tmp++)
i++;
//printf("%d\n",i);
for(j = ; j < i/; j++){
char ch;
ch = val[j];
val[j] = val[i - j - ];
val[i - j - ] = ch;
}
} void my_atoi(char* val,int num){
int i = ;
while(num/){
val[i] = change(num%);
num /= ;
i++;
}
val[i++] = change(num);
val[i++] = 'x';
val[i++] = '';
val[i++] = ;
//由于存入数组中的元素是倒序的,要把数组颠倒一下
swap2(val);
}
char* my_atoi2(char* val, int num){
int i = val[];
while(--i)
val++;
//printf("%c\n",*val);
*val-- = ; //由于是倒着输入,所以第一个元素应该是字符串的结束符
while(num/){
*val-- = change(num % );
num /= ;
}
*val-- = change(num%);
*val-- = 'x';
*val = '';
return val;
}
int main(void){
char val[];
val[] = ;
//my_atoi2(val,43983);
printf("%s\n",my_atoi2(val,));
return ;
}
int main(void){
char val[];
my_atoi(val,);
printf("%s\n",val);
return ;
}

【C】——itoa 函数的实现的更多相关文章

  1. C语言itoa()函数和atoi()函数详解(整数转字符C实现)

    1.int/float to string/array: C语言提供了几个标准库函数,可以将任意类型(整型.长整型.浮点型等)的数字转换为字符串,下面列举了各函数的方法及其说明. ● itoa():将 ...

  2. C语言itoa()函数和atoi()函数详解(整数转字符)

    http://c.biancheng.net/cpp/html/792.html C语言提供了几个标准库函数,可以将任意类型(整型.长整型.浮点型等)的数字转换为字符串. 以下是用itoa()函数将整 ...

  3. itoa函数的实现(不同进制)

    2013-07-08 17:12:30 itoa函数相对于atoi函数,比较简单,还是要注意考虑的全面. 小结: 一下几点需要考虑: 对负数,要加上负号: 考虑不同进制,根据要求进行处理:对不同的进制 ...

  4. itoa函数的递归实现(二级指针实现)

    问题提出 <C Programming Language>书中在递归这一节预留了两个使用递归实现的函数,其中itoa函数是用来将一个整数转换为一个字符串.书中已有使用循环实现的版本,但是直 ...

  5. C语言itoa函数和atoi 函数

    C语言提供了几个标准库函数,可以将任意类型(整型.长整型.浮点型等)的数字转换为字符串.以下是用itoa()函数将整数转 换为字符串的一个例子: # include <stdio.h>  ...

  6. c++实现atoi()和itoa()函数(字符串和整数转化)

    (0) c++类型所占的字节和表示范围 c 语言里 类型转换那些事儿(补码 反码) 应届生面试准备之道 最值得学习阅读的10个C语言开源项目代码 一:起因 (1)字符串类型转化为整数型(Integer ...

  7. itoa函数,sprintf函数

    itoa函数 itoa 为c语言的一个函数.itoa 函数是一个广泛应用的,从非标准扩展到标准的C语言.它不能被移植,因为它不是标准定义下的C语言,但是,编译器通常在一个不遵循程式标准的模式下允许其通 ...

  8. 源码实现 --> itoa函数实现

    itoa函数实现 itoa()函数的功能是将一个整数转换为一个字符串 例如12345,转换之后的字符串为"12345",-123转换之后为"-123",欢迎大家 ...

  9. 面试:atoi() 与 itoa()函数的内部实现(转)

    原 面试:atoi() 与 itoa()函数的内部实现 2013年04月19日 12:05:56 王世晖 阅读数:918   #include <stdio.h> #include < ...

  10. itoa()函数和atoi()函数详解

    C语言提供了几个标准库函数,可以将任意类型(整型.长整型.浮点型等)的数字转换为字符串. 以下是用itoa()函数将整数转换为字符串的一个例子:# include <stdio.h># i ...

随机推荐

  1. Github emoji 表情包大全

    传送门:https://www.jianshu.com/p/72a4214764e4 https://www.webpagefx.com/tools/emoji-cheat-sheet/

  2. 中控考勤机SDK使用中员工姓名的处理( c# )

    公司使用的考勤机是中控的指纹考勤机,但是中控的型号乱七八糟,通过程序读出来的型号和实际标的型号不一致. 另外,提供的开发包的C#版本的Demo中调用 axCZKEM1.ReadAllUserID(iM ...

  3. php的opcode缓存

    前言:由php的运行机制决定,其实php在运行阶段我们也是可以进行缓存的从而提高程序运行效率,这就是我们常说的opcode缓存.1.简述php的运行机制(因为本文是写opcode缓存的所以这里只是简要 ...

  4. c 常见错误

    ."c" not an argument in function sum 该标识符不是函数的参数2.array bounds missing ] in function main ...

  5. Atitit 图像处理之编程之类库调用的接口api cli gui ws rest  attilax大总结.docx

    Atitit 图像处理之编程之类库调用的接口api cli gui ws rest  attilax大总结.docx 1. 为什么需要接口调用??1 1.1. 为了方便集成复用模块类库1 1.2. 嫁 ...

  6. android笔记---主界面(二)自定义actionbar环境的配置

    第一步,添加java文件 第二步,添加actionbar的item文件 是个选择器,点中状态和选中状态 <?xml version="1.0" encoding=" ...

  7. python virtualenv使用

    1.什么是virtualenv virtualenv用来做环境隔离,比如项目A使用了python2,项目B使用了python3 使用virtualenv可以分别生成项目A和项目B的环境包 2.virt ...

  8. psycopg事务

    1.事务的特性 原子性,要么完成,要么都不完成 2.psycopg的事务特点 在psycopg中,事务是由connection处理的,当第一次一个命令发送给数据库时(开启数据库操作游标), 一个事务就 ...

  9. python(39):argparse的用法,从外部传入指定参数

    直接上例子: # /usr/bin/env python # coding=utf8 import os import argparse import logging import sys FORMA ...

  10. [开源项目-MyBean轻量级配置框架] 使用MyBean快速搭建分模块的应用程序(主页面的TAB)(DLL-MDI)

    [概述] 抱歉由于上次开源比较匆忙,没有来的及做一个DEMO,里面也有些垃圾的文件没有及时清理.DEMO其实昨天晚上已经调通.相关说明文档今天晚上才说明好,欢迎大家继续关注和交流,和大家一起分享我10 ...