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語言字元串與數字互相轉換
本人不才,有錯希望大家指出。