【C】——itoa 函数的实现
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 函数的实现的更多相关文章
- C语言itoa()函数和atoi()函数详解(整数转字符C实现)
1.int/float to string/array: C语言提供了几个标准库函数,可以将任意类型(整型.长整型.浮点型等)的数字转换为字符串,下面列举了各函数的方法及其说明. ● itoa():将 ...
- C语言itoa()函数和atoi()函数详解(整数转字符)
http://c.biancheng.net/cpp/html/792.html C语言提供了几个标准库函数,可以将任意类型(整型.长整型.浮点型等)的数字转换为字符串. 以下是用itoa()函数将整 ...
- itoa函数的实现(不同进制)
2013-07-08 17:12:30 itoa函数相对于atoi函数,比较简单,还是要注意考虑的全面. 小结: 一下几点需要考虑: 对负数,要加上负号: 考虑不同进制,根据要求进行处理:对不同的进制 ...
- itoa函数的递归实现(二级指针实现)
问题提出 <C Programming Language>书中在递归这一节预留了两个使用递归实现的函数,其中itoa函数是用来将一个整数转换为一个字符串.书中已有使用循环实现的版本,但是直 ...
- C语言itoa函数和atoi 函数
C语言提供了几个标准库函数,可以将任意类型(整型.长整型.浮点型等)的数字转换为字符串.以下是用itoa()函数将整数转 换为字符串的一个例子: # include <stdio.h> ...
- c++实现atoi()和itoa()函数(字符串和整数转化)
(0) c++类型所占的字节和表示范围 c 语言里 类型转换那些事儿(补码 反码) 应届生面试准备之道 最值得学习阅读的10个C语言开源项目代码 一:起因 (1)字符串类型转化为整数型(Integer ...
- itoa函数,sprintf函数
itoa函数 itoa 为c语言的一个函数.itoa 函数是一个广泛应用的,从非标准扩展到标准的C语言.它不能被移植,因为它不是标准定义下的C语言,但是,编译器通常在一个不遵循程式标准的模式下允许其通 ...
- 源码实现 --> itoa函数实现
itoa函数实现 itoa()函数的功能是将一个整数转换为一个字符串 例如12345,转换之后的字符串为"12345",-123转换之后为"-123",欢迎大家 ...
- 面试:atoi() 与 itoa()函数的内部实现(转)
原 面试:atoi() 与 itoa()函数的内部实现 2013年04月19日 12:05:56 王世晖 阅读数:918 #include <stdio.h> #include < ...
- itoa()函数和atoi()函数详解
C语言提供了几个标准库函数,可以将任意类型(整型.长整型.浮点型等)的数字转换为字符串. 以下是用itoa()函数将整数转换为字符串的一个例子:# include <stdio.h># i ...
随机推荐
- C#基础第二天-作业答案-九九乘法表-打印星星
题一:九九乘法表的答案 //正三角 ; i < ; i++) { ; j <= i; j++) { Console.Write("{0}*{1}={2} ", j, i ...
- 大家来找茬:富连网今天中午抢购二手iPhone时网站无法访问的问题
前几天在新闻区看到富士康卖二手iPhone的新闻,今天又看到说今天中午12点开抢.一大早就发现富连网无法访问了.前几天刚看到新闻的时候注册了个账号进去看了看,发现页面加载速度非常慢,今天中午基本无法打 ...
- MySQL通过Explain查看select语句的执行计划结果触发写操作
[背景] 某某同学执行了一下Explain结果结果发现数据库有了一条写入操作,恭喜这位同学你的锅到货了,你签收一下: 对! 你没有听错,在一种场景下就算是Explain也会引发数据的写操作,就这是外层 ...
- 基础003_V7-Memory Resources
一.综述 参考ug473.pdf. 常用Memory 资源: 在IP核中,Block memory(distributed memory为CLB中的资源): 通常选用Native,而不用AXI接口: ...
- MySQL中NULL与空字符串
一些刚刚接触MySQL的孩子,经常会错误的认为NULL与空字符串’ ’是相同的.这看似是一件不重要的事情,但是在MySQL中,这两者是完全不同的.NULL是指没有值,而”则表示值是存在的,只不过是个 ...
- 关于ansbile工具的shell、command、script、raw模块的区别和使用场景
command模块 [执行远程命令] [root@node1 ansible]# ansible testservers -m command -a 'uname -n' script模块 [在远程主 ...
- php基础面试题:
1:print.print_r.echo到底有什么区别? 2:get和post的区别 echo和print都可以做输出,不同的是,echo不是函数,没有返回值,而print是一个函数有返回值,所以相对 ...
- iframe父页面获取iframe子页面的元素 与 iframe子页面获取父页面元素
一.在iframe子页面获取父页面元素代码如下:$('#objld', parent.document); 二.在父页面获取iframe子页面的元素代码如下:$("#objid", ...
- Android 自定义 View 知识点
根据 Hencoder 提供的知识点,进行学习和总结. 三个要点: 布局 绘制 触摸反馈 绘制 自定义绘制:由自己实现绘制过程 常用绘制方法 onDraw(Canvas canvas) 绘制关键: c ...
- Javascript的&&和||的另类用法
Javascript的&&和||的另类用法. 又开始研究起 Titanium 来,发现其官方出品的MVC框架(Alloy)还是挺不错的,刚开始苦于没有好的代码来学习,文档又少,所以一直 ...