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. django缓存基于类的视图

    引子: 有些场景下由于数据库中的数据很长时间内都不会发生变化,如果每次调用view都要去查询一次数据库的话,明显是多做了一些无用 工的:django中可以通过装饰器方便的实现view的缓存. 为什么c ...

  2. pm2 设置开机启动

    一.官方文档: 官方相关文档:http://pm2.keymetrics.io/docs/usage/startup/#generating-a-startup-script 二.具体操作过程如下: ...

  3. unity, ios skin crash

    https://issuetracker.unity3d.com/issues/ios-loading-models-with-tangents-set-to-calculate-legacy-fro ...

  4. 基于Docker的负载均衡和服务发现

    应用的容器化和微服务化带来的问题 在缺省网络模型中,容器每次重启后,IP会发生变动,在一个大的分布式系统保证IP地址不变是比较复杂的事情 IP频繁发生变动,动态应用部署无法预知容器的IP地址,clie ...

  5. 设计模式-观察者模式(Observer Pattern)

    观察者模式(Observer Pattern):定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象.这个主题对象在状态发生变化时,会通知所有观察者对象,使他们能够自动更新自己. 观察者 ...

  6. Eclipse Axis2 插件将代码生成WSDL指南

    Eclipse Axis2 插件将代码生成WSDL指南 快速学习手册 开发工具:https://spring.io/tools 插件地址:http://axis.apache.org/axis2/ja ...

  7. 不应直接存储或返回可变成员 Mutable members should not be stored or returned directly

    Mutable objects are those whose state can be changed. For instance, an array is mutable, but a Strin ...

  8. IOS开发之UIScrollVIew运用

    UIScrollView可以实现在一个界面看到所有内容,同时也不需要担心所显示的内容超出屏幕的大小,当超出之后可以翻阅至下一页浏览. #pragma mark - UIScrollViewDelega ...

  9. create-react-app的使用及原理分析

    create-react-app 是一个全局的命令行工具用来创建一个新的项目 react-scripts 是一个生成的项目所需要的开发依赖 一般我们开始创建react web应用程序的时候,要自己通过 ...

  10. 菜鸟学SSH(十六)——Struts2内部是如何工作的

    前面说完了Spring.Hibernate,很自然今天轮到struts了.struts的核心原理就是通过拦截器来处理客户端的请求,经过拦截器一系列的处理后,再交给Action.下面先看看struts官 ...