天天看點

字元串與數字互相轉換  1.數字轉換為字元串2.字元串轉換為數字

  1.數字轉換為字元串

           C語言提供了幾個标準庫函數,可以将任意類型(整型、長整型、浮點型等)的數字轉換為字元串,有如下幾種函數對應不同的需求。

              ● itoa():将整型值轉換為字元串。

              ● ltoa():将長整型值轉換為字元串。

              ● ultoa():将無符号長整型值轉換為字元串。

              ● gcvt():将浮點型數轉換為字元串,取四舍五入。

              ● ecvt():将雙精度浮點型值轉換為字元串,轉換結果中不包含十進制小數點。

              ● fcvt():指定位數為轉換精度,其餘同ecvt()。

            當要求不使用庫函數來進行轉換。我們可以探讨一下思路。

            數字是int等類型,而字元串變量需要字元數組來存放。由此可知需要将數字求出各個位然後存放到數組中。需要特别注意的就是當數字是負數時需要在數組的第0位存放正負符号。

            具體實作如下:

void int2str(int n,char*str)
{
    int temp;
    temp=n>0?n:-n; //保證temp為正

    char buff[10]="";
    int i=0;
    int len=0;
    if(str==NULL)
        return;
    while(temp)
    {
        buff[i++]=temp%10+'0';
        temp=temp/10;
    }
    len=n<0?++i:i;  //在字元數組中為正負号留下位置

    str[i]=0;
    while(1)
    {
        i--;
        if(buff[len-i-1]==0)
            break;
        str[i]=buff[len-i-1];

    }
    if(i==0)
    {
        str[i]='-';
    }
}
           

    注意事項:

    1.while函數中buff倒序複制到str,這時是為了給正負号留下位置。當然也可以先判斷正負号,對i進行++操作,然後再正序複制。

2.字元串轉換為數字

        與1類似,C/C++語言提供了幾個标準庫函數,可以将字元串轉換為任意類型(整型、長整型、浮點型等)。以下列舉了各函數的方法及其說明。

           ● atof():将字元串轉換為雙精度浮點型值。

          ● atoi():将字元串轉換為整型值。

          ● atol():将字元串轉換為長整型值。

          ● strtod():将字元串轉換為雙精度浮點型值,并報告不能被轉換的所有剩餘數字。

          ● strtol():将字元串轉換為長整值,并報告不能被轉換的所有剩餘數字。

          ● strtoul():将字元串轉換為無符号長整型值,并報告不能被轉換的所有剩餘數字。

            當要求不使用庫函數來進行轉換。我們探讨一下思路。

            字元串變量存儲在字元數組之中,即可以按照下标通路到每個字元。根據ASCII碼的規則每個字元可以找到對應的數字,即‘4’-‘0'數值等于4。按照此特性即可進行轉換。

            特别要注意的是正負号的處理,我的方法是用一個常數來記錄正負。

int str2int(char *str)
{
    int temp=0;
    int c=1; //正負系數
    if(*str=='-')
    {
        c=-1;
        str++;
    }
    if(*str=='+')
    {
        str++;
    }
    while (*str!=0)
    {
        if((*str<'0')||(*str>'9'))
        {
            break;
        }
        temp=temp*10+(*str-'0');
        str++;
    }
    temp=c*temp;

    return temp;
}
           

參考網址:C語言字元串與數字互相轉換

本人不才,有錯希望大家指出。

繼續閱讀