C 語言整數與字串的相互轉換介紹

安全劍客發表於2020-04-25
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;
}

效果截圖:
C 語言整數與字串的相互轉換介紹C 語言整數與字串的相互轉換介紹

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;//返回轉換後的值 }

效果截圖:
C 語言整數與字串的相互轉換介紹C 語言整數與字串的相互轉換介紹

三、字串轉整數
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;
 
}

C 語言整數與字串的相互轉換介紹C 語言整數與字串的相互轉換介紹

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;
}

截圖:
C 語言整數與字串的相互轉換介紹C 語言整數與字串的相互轉換介紹

四、利用 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;
 
}

執行結果:
C 語言整數與字串的相互轉換介紹C 語言整數與字串的相互轉換介紹

字串轉整數

測試程式碼:

例項

#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;
}

執行結果:
C 語言整數與字串的相互轉換介紹C 語言整數與字串的相互轉換介紹

五、附ASCII碼錶(部分)

C 語言整數與字串的相互轉換介紹C 語言整數與字串的相互轉換介紹

原文地址:

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31559985/viewspace-2688277/,如需轉載,請註明出處,否則將追究法律責任。

相關文章