自己實現itoa(),10進制到2~36進制的轉換


先看下itoa()的函數說明:

功能:把一整數轉換為字符串

用法:char *itoa(int value, char *string, int radix);

詳細解釋:itoa是integer to array(將int整型轉化為一個字符串,並將值保存在數組string中)的縮寫。

參數:value :待轉化的整數。

        radix:是基數的意思,即將value轉化為radix進制的數,范圍介於2-36,比如10表示10進制,16表示16進制。

        *string:保存轉換后得到的字符串。

返回值:char *:指向生成的字符串,同*string。

備注:該函數的頭文件是“stdlib.h”(包含在iostream里面)

記住一點:itoa並不是一個標准的C函數,它是Windows特有的,如果要寫跨平台的程序,請用sprintf。 
是Windows平台下擴展的,標准庫中有sprintf,功能比這個更強,用法跟printf類似。

備注:atoi()是標准庫里面的函數,在C/C++語言參考函數里面有,而itoa()卻沒有,對此我們最好自己實現itoa()函數。

雖然可能itoa無法使用,但是我們可以編寫自己的itoa()函數,以下是實現源代碼:

 

 1 //n是要被轉換的十進制數,bit是要被轉換的進制數 
 2 #include <iostream> 
 3 #include <string> 
 4 using namespace std; 
 5 
 6 char * Ten_to_other(int num,char* str, int radix) 
 7 {
 8     const char a[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
 9     char *ptr=str;
10     bool negtive = false;
11     if(num==0)
12     {
13         *ptr++=0;
14         *ptr='\0';
15         return NULL;//直接就退出,不走后面的情況了,不跟后面共用一個return語句。
16     }
17     if(num<0)
18     {
19         num *= -1;
20         *ptr++ ='-';
21         negtive = true;
22     }
23     while(num) //不能處理num=0的情況
24     {
25         *ptr++=a[num%radix];
26         num /= radix; 
27     } 
28     *ptr='\0';//此時ptr已經指向字符串結尾,而str仍舊指向字符串開始。
29     ptr--;//讓ptr指向字符串內容!!
30     char *start=(negtive)? str+1:str;//注意此處不能寫str++,否則,str不指向保存值的首地址了
31     while(start<ptr)
32     {
33         char tmp=*ptr;
34         *ptr=*start;
35         *start=tmp;
36         ptr--;
37         start++;
38         /*char tmp=*ptr--;//這樣寫ptr,str都加了那么多遍,肯定錯了啊!!!
39         *ptr--=*str++;
40         *str++=tmp;*/
41     }
42     /*int len=strlen(str); 
43     int i = (negtive)? 1:0;
44     for(i; i<len/2; ++i) //當為負數時候,str字符串最后的字符不能用len-1-i了,因為此時i=1而不是0
45     {
46         char tmp = str[i];
47         str[i]=str[len-1-i];
48         str[len-1-i]=tmp; 
49     } */
50     return NULL; 
51 } 
52 int main()
53 {
54     char a[12]={0}; 
55     Ten_to_other(-82,a,6); 
56     cout<<a<<endl; 
57     system("pause"); 
58     return 0; 
59 } 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM