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. ELK收集mysql_slow.log

    关于慢查询的收集及处理也耗费了我们太多的时间和精力,如何在这一块也能提升效率呢?且看本文讲解如何利用ELK做慢日志收集. ELK 介绍 ELK 最早是 Elasticsearch(以下简称ES).Lo ...

  2. Android 7.0 出现 ”FileUriExposedException“ 和 ”解析包出现错误“ 异常的解决办法

    问题1 :android.os.FileUriExposedException: file:///storage/emulated/0/Android/data/com.xxx.xxx.xxx.rel ...

  3. pannel加载form

    panel2.Controls.Clear(); frm.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None; frm.ShowIc ...

  4. 将redis作为windows服务安装

    1,下载redis并解压到一个目录下,然后切换到该目录下,也就是redis-server.exe文件所在的目录 2,在cmd下执行 redis-server --service-install red ...

  5. 用casperjs模拟登录,支持多个账户登录

    var casper = require('casper').create({ viewportSize:{ width:1920, height:1080 } }); var url1 = 'htt ...

  6. chrome浏览器:chrome 69 恢复默认UI

    1.在浏览器地址栏输入 chrome://flags/#top-chrome-md 并回车 2.将UI Layout for the browser's top chrome 右边的选项修改为Norm ...

  7. spark join

    https://jaceklaskowski.gitbooks.io/mastering-apache-spark/content/spark-sql-joins.html https://acadg ...

  8. vss整合配置连接到Myeclipse中以及中文配置

    配置过很久后 再次配置进行记录以免后续备用 1.下载vss插件和安装vss插件 org.vssplugin_1.6.2 解压到myeclipse 安装路径文件夹C:\MyEclipse 8.5\dro ...

  9. 每日英语:When The Boss Works Long Hours, Do We All Have To?

    The problem: Every night, your workaholic boss is still glued to the computer when you need to leave ...

  10. 如何打开chrome中flash debug player

    If you’ve installed the latest version of Google Chrome, and you are having a problem debugging your ...