C 語言整數與字串的相互轉換介紹
C 語言中整數與字串的相互轉換,有廣泛應用的擴充函式(非標準庫),也可以自己嘗試簡單的實現。 |
一、簡述
C 語言中整數與字串的相互轉換,有廣泛應用的擴充函式(非標準庫),也可以自己嘗試簡單的實現。
二、整數轉字串
1、擴充函式 itoa
itoa (表示 integer to alphanumeric)是把整型數轉換成字串的一個函式。
windows 環境下,在 標頭檔案中有:
char* itoa(int value,char*string,int radix);//value: 要轉換的整數,string: 轉換後的字串,radix: 轉換進位制數,如2,8,10,16 進位制等。
函式原始碼:
char* itoa(int num,char* str,int radix) { char index[]="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";//索引表 unsigned unum;//存放要轉換的整數的絕對值,轉換的整數可能是負數 int i=0,j,k;//i用來指示設定字串相應位,轉換之後i其實就是字串的長度;轉換後順序是逆序的,有正負的情況,k用來指示調整順序的開始位置;j用來指示調整順序時的交換。 //獲取要轉換的整數的絕對值 if(radix==10&&num<0)//要轉換成十進位制數並且是負數 { unum=(unsigned)-num;//將num的絕對值賦給unum str[i++]='-';//在字串最前面設定為'-'號,並且索引加1 } else unum=(unsigned)num;//若是num為正,直接賦值給unum //轉換部分,注意轉換後是逆序的 do { str[i++]=index[unum%(unsigned)radix];//取unum的最後一位,並設定為str對應位,指示索引加1 unum/=radix;//unum去掉最後一位 }while(unum);//直至unum為0退出迴圈 str[i]='\0';//在字串最後新增'\0'字元,c語言字串以'\0'結束。 //將順序調整過來 if(str[0]=='-') k=1;//如果是負數,符號不用調整,從符號後面開始調整 else k=0;//不是負數,全部都要調整 char temp;//臨時變數,交換兩個值時用到 for(j=k;j<=(i-1)/2;j++)//頭尾一一對稱交換,i其實就是字串的長度,索引最大值比長度少1 { temp=str[j];//頭部賦值給臨時變數 str[j]=str[i-1+k-j];//尾部賦值給頭部 str[i-1+k-j]=temp;//將臨時變數的值(其實就是之前的頭部值)賦給尾部 } return str;//返回轉換後的字串 }
示例程式:
例項
#include#includeint main() { int number1 = 123456; int number2 = -123456; char string[16] = {0}; itoa(number1,string,10); printf("數字:%d 轉換後的字串為:%s\n",number1,string); itoa(number2,string,10); printf("數字:%d 轉換後的字串為:%s\n",number2,string); return 0; }
效果截圖:
2、自己簡單實現
實現程式碼:
例項
#include <stdio.h> char* Int2String(int num,char *str);//函式宣告 int main(){ int number1 = 123456; int number2 = -123456; char string[16] = {0}; Int2String(number1,string); printf("數字:%d 轉換後的字串為:%s\n",number1,string); Int2String(number2,string); printf("數字:%d 轉換後的字串為:%s\n",number2,string); return 0;} char* Int2String(int num,char *str)//10進位制 { int i = 0;//指示填充str if(num<0)//如果num為負數,將num變正 { num = -num; str[i++] = '-'; } //轉換 do { str[i++] = num%10+48;//取num最低位 字元0~9的ASCII碼是48~57;簡單來說數字0+48=48,ASCII碼對應字元'0' num /= 10;//去掉最低位 }while(num);//num不為0繼續迴圈 str[i] = '\0'; //確定開始調整的位置 int j = 0; if(str[0]=='-')//如果有負號,負號不用調整 { j = 1;//從第二位開始調整 ++i;//由於有負號,所以交換的對稱軸也要後移1位 } //對稱交換 for(;j<i/2;j++) { //對稱交換兩端的值 其實就是省下中間變數交換a+b的值:a=a+b;b=a-b;a=a-b; str[j] = str[j] + str[i-1-j]; str[i-1-j] = str[j] - str[i-1-j]; str[j] = str[j] - str[i-1-j]; } return str;//返回轉換後的值 }
效果截圖:
三、字串轉整數
1、擴充函式
atoi (表示 alphanumeric to integer)是把字串轉換成整型數的一個函式。
windows 環境下,在 標頭檔案中。
int atoi(const char *nptr);//字串轉整數函式,nptr: 要轉換的字串
函式原始碼
int atoi(const char *nptr) { return (int)atol(nptr); } long atol(const char *nptr) { int c; /* 當前要轉換的字元(一個一個字元轉換成數字) */ long total; /* 當前轉換結果 */ int sign; /* 標誌轉換結果是否帶負號*/ /*跳過空格,空格不進行轉換*/ while ( isspace((int)(unsigned char)*nptr) ) ++nptr; c = (int)(unsigned char)*nptr++;//獲取一個字元準備轉換 sign = c; /*儲存符號標示*/ if (c == '-' || c == '+') c = (int)(unsigned char)*nptr++; /*跳過'+'、'-'號,不進行轉換*/ total = 0;//設定轉換結果為0 while (isdigit(c)) {//如果字元是數字 total = 10 * total + (c - '0'); /* 根據ASCII碼將字元轉換為對應的數字,並且乘10累積到結果 */ c = (int)(unsigned char)*nptr++; /* 取下一個字元 */ } //根據符號指示返回是否帶負號的結果 if (sign == '-') return -total; else return total; }
示例程式:
例項
#include#includeint main() { printf("字串\"123456\"轉換為數字:%d\n",atoi("123456")); printf("字串\"-123456\"轉換為數字:%d\n",atoi("-123456")); return 0; }
2、自己簡單實現
實現原始碼:
例項
#includeint String2Int(char *str);//函式宣告 int main() { printf("字串\"123456\"轉換為數字:%d\n",String2Int("123456")); printf("字串\"-123456\"轉換為數字:%d\n",String2Int("-123456")); return 0; } int String2Int(char *str)//字串轉數字 { char flag = '+';//指示結果是否帶符號 long res = 0; if(*str=='-')//字串帶負號 { ++str;//指向下一個字元 flag = '-';//將標誌設為負號 } //逐個字元轉換,並累加到結果res while(*str>=48 && *str<57)//如果是數字才進行轉換,數字0~9的ASCII碼:48~57 { res = 10*res+ *str++-48;//字元'0'的ASCII碼為48,48-48=0剛好轉化為數字0 } if(flag == '-')//處理是負數的情況 { res = -res; } return (int)res; }
截圖:
四、利用 sprintf() 函式和 sscanf() 函式
整數轉字串
測試程式碼:
例項
#includechar* Int2String(int num,char *str);//函式宣告 int main() { int number1 = 123456; int number2 = -123456; char string[16] = {0}; Int2String(number1,string); printf("數字:%d 轉換後的字串為:%s\n",number1,string); Int2String(number2,string); printf("數字:%d 轉換後的字串為:%s\n",number2,string); return 0; } char* Int2String(int num,char *str) { sprintf(str, "%d", num); return str; }
執行結果:
字串轉整數
測試程式碼:
例項
#includeint String2Int(char *str);//函式宣告 int main() { printf("字串\"123456\"轉換為數字:%d\n",String2Int("123456")); printf("字串\"-123456\"轉換為數字:%d\n",String2Int("-123456")); return 0; } int String2Int(char *str)//字串轉數字 { char flag = '+';//指示結果是否帶符號 long res = 0; if(*str=='-')//字串帶負號 { ++str;//指向下一個字元 flag = '-';//將標誌設為負號 } sscanf(str, "%ld", &res); if(flag == '-') { res = -res; } return (int)res; }
執行結果:
五、附ASCII碼錶(部分)
原文地址:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31559985/viewspace-2688277/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- c語言字串與整形,浮點數...相互轉換C語言字串
- JSON字串與HashMap相互轉換JSON字串HashMap
- go語言與c語言的相互呼叫GoC語言
- 陣列與字串方法與相互轉換陣列字串
- java 字串與檔案相互轉換Java字串
- 字串轉換整數(atoi)字串
- string與數字相互轉換
- 劍指offer——把字串轉換成整數C++字串C++
- JavaScript陣列與字串相互轉換 join、splitJavaScript陣列字串
- mysql時間與字串之間相互轉換MySql字串
- python實現字串轉換整數Python字串
- 判斷迴文串 字串/數字相互轉換字串
- C語言進位制轉換與列印C語言
- C#中JSON字串和Dictionary字典型別的相互轉換C#JSON字串型別
- String to Integer (atoi) 字串轉換整數 (atoi)字串
- C語言-GCC的簡單介紹C語言GC
- JZ-049-把字串轉換成整數字串
- C語言sizeof()變數、字元、字串C語言變數字元字串
- C語言字串C語言字串
- c++中數字和字串的轉換C++字串
- UIImage與Iplimage相互轉換UI
- SDOM與QDOM相互轉換
- DataTable與List相互轉換
- 日期與字串的互相轉換SQL語句字串SQL
- C語言的隱式型別轉換C語言型別
- 【LeetCode】整數轉羅馬數字 C語言 | 此刻,已成藝術(bushi)LeetCodeC語言
- 2020-11-13整數轉換為字串 字元反轉字串字元
- javascript字串的語法介紹JavaScript字串
- 組合語言-019(彙編程式與c\c++相互呼叫)組合語言C++
- C語言,實現數字譜到簡譜的轉換(二)C語言
- Python 漢字區位碼、字串 相互轉換Python字串
- JS實現JSON物件與URL引數的相互轉換JSON物件
- C語言 - 字串拼接C語言字串
- java 物件與xml相互轉換Java物件XML
- C# float浮點數與二進位制相互轉換(IEEE754)C#
- 劍指offer(Java版)--將字串轉換為整數Java字串
- xml與陣列的相互轉換——phpXML陣列PHP
- Go語言介紹Go