首页 > 其他 > 详细

【C】——itoa 函数的实现

时间:2014-03-21 01:38:27      阅读:431      评论:0      收藏:0      [点我收藏+]

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

主函数:

1 int main(void){
2     char val[12];
3     my_atoi(val,43983);
4     printf("%s\n",val);
5     return 0;
6 }

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

bubuko.com,布布扣
char change(int num){
    if(num > 9)
        return num+A-10;
    else
        return num+0;
}

//颠倒数组中的元素
void swap(char* val){
    char* tmp;
    tmp = val;
    while(*++tmp);
    tmp--;
    //printf("%c\n",*tmp);    
    //printf("%d\n",tmp-val);
    while((tmp - val + 1) / 2){
        char ch;
        ch = *tmp;
        *tmp = *val;
        *val = ch;
        tmp--;
        val++;
    }
}
void my_atoi(char* val,int num){
    int i = 0;
    while(num/16){
        val[i] = change(num%16);    
        num /= 16;
        i++;
    }    
    val[i++] = change(num);
    val[i++] = x;
       val[i++] = 0;
    val[i++] = 0;
    //由于存入数组中的元素是倒序的,要把数组颠倒一下
    swap(val);    
}
bubuko.com,布布扣

 

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

bubuko.com,布布扣
 1 void swap2(char* val){
 2     char* tmp = val;
 3     int i = 0;
 4     int j;
 5     while(*tmp++)
 6         i++;
 7     //printf("%d\n",i);
 8     for(j = 0; j < i/2; j++){
 9         char ch;
10         ch = val[j];
11         val[j] = val[i - j - 1];
12         val[i - j - 1] = ch;
13     }
14 }
bubuko.com,布布扣

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

bubuko.com,布布扣
 1 char* my_atoi2(char* val, int num){
 2     int i = val[0];
 3     while(--i)
 4         val++;
 5     //printf("%c\n",*val);
 6     *val-- = 0;  //由于是倒着输入,所以第一个元素应该是字符串的结束符
 7     while(num/16){
 8         *val-- = change(num % 16);
 9         num /= 16;
10     }
11     *val-- = change(num%16); 
12     *val-- = x;
13     *val = 0;
14     return val;
15 }
bubuko.com,布布扣

main函数修改如下:

1 int main(void){
2     char val[12];
3     my_atoi(val,43983);
4     printf("%s\n",val);
5     return 0;
6 }

全部代码如下:

bubuko.com,布布扣
 1 #include <stdio.h>
 2 
 3 char change(int num){
 4     if(num > 9)
 5         return num+A-10;
 6     else
 7         return num+0;
 8 }
 9 
10 //颠倒数组中的元素
11 void swap(char* val){
12     char* tmp;
13     tmp = val;
14     while(*++tmp);
15     tmp--;
16     //printf("%c\n",*tmp);    
17     //printf("%d\n",tmp-val);
18     while((tmp - val + 1) / 2){
19         char ch;
20         ch = *tmp;
21         *tmp = *val;
22         *val = ch;
23         tmp--;
24         val++;
25     }
26 }
27 
28 void swap2(char* val){
29     char* tmp = val;
30     int i = 0;
31     int j;
32     while(*tmp++)
33         i++;
34     //printf("%d\n",i);
35     for(j = 0; j < i/2; j++){
36         char ch;
37         ch = val[j];
38         val[j] = val[i - j - 1];
39         val[i - j - 1] = ch;
40     }
41 }
42 
43 void my_atoi(char* val,int num){
44     int i = 0;
45     while(num/16){
46         val[i] = change(num%16);    
47         num /= 16;
48         i++;
49     }    
50     val[i++] = change(num);
51     val[i++] = x;
52        val[i++] = 0;
53     val[i++] = 0;
54     //由于存入数组中的元素是倒序的,要把数组颠倒一下
55     swap2(val);    
56 }
57 char* my_atoi2(char* val, int num){
58     int i = val[0];
59     while(--i)
60         val++;
61     //printf("%c\n",*val);
62     *val-- = 0;  //由于是倒着输入,所以第一个元素应该是字符串的结束符
63     while(num/16){
64         *val-- = change(num % 16);
65         num /= 16;
66     }
67     *val-- = change(num%16); 
68     *val-- = x;
69     *val = 0;
70     return val;
71 }
72 int main(void){
73     char val[12];
74     val[0] = 12;
75     //my_atoi2(val,43983);
76     printf("%s\n",my_atoi2(val,43983));
77     return 0;
78 }
79 int main(void){
80     char val[12];
81     my_atoi(val,43983);
82     printf("%s\n",val);
83     return 0;
84 }
View Code

【C】——itoa 函数的实现,布布扣,bubuko.com

【C】——itoa 函数的实现

原文:http://www.cnblogs.com/ngnetboy/p/3614849.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!