C 語言 函式-文字與數值之間的轉換
作者:許裕永 Darban
文字 (string) 與數值 (numeric) 之間的轉換 (convert) 是程式碼不可或缺的技巧,本文章列出常用的函式,並解釋這些函式的用法,讓讀者可以一方面學會函式的用法,也可以同時學會文字與基本資料型別之間的轉換。
標頭檔名稱:stdio.h
這個標頭檔提供的函式,可以讓我們把數值格式化成文字後,嵌在一大串文字中;也可以讓我們擷取嵌在一大串文字中的數值文字。雖然用起來有點難度,但實用性很高。
*_* 數值轉成文字 / numeric
convert to string
1.
int sprintf ( char * str, const
char * format, ... );
參數 / Parameters
參數 / Parameters
A.
str
一個文字指標。用來儲存數值格式化後之文字,它必須有足夠的容量來避免產生錯誤。
一個文字指標。用來儲存數值格式化後之文字,它必須有足夠的容量來避免產生錯誤。
B.
format
一個文字的字面值,用來表明數值格式化的方式。用法與 printf 相同。
一個文字的字面值,用來表明數值格式化的方式。用法與 printf 相同。
C.
...
用逗號隔開的值。用法與 printf 相同。
用逗號隔開的值。用法與 printf 相同。
返回值 / return value
在格式化成功時會得到字元的總數,不包含文字最後面的空字元。
若得到負值,表示格式化失敗。
範例:
int radius;
printf("Please input the radius
=>");
scanf("%d", &radius);
double area = radius * radius * 3.14159;
char word[20];
sprintf(word,"The area is %.2f.",
area);
printf("%s", word);
*_* 文字轉成數值 /
string convert to numeric
1.
int sscanf ( const char * s,
const char * format, ...);
參數 / Parameters
參數 / Parameters
A.
s
一個文字指標。函式會從這個文字的內容中取得要轉換成數值的文字。
一個文字指標。函式會從這個文字的內容中取得要轉換成數值的文字。
B.
format
一個文字的字面值,用來表明格式化的方式。用法與 printf 相同。
一個文字的字面值,用來表明格式化的方式。用法與 printf 相同。
C.
...
用逗號隔開的值。用法與 printf 相同。
用逗號隔開的值。用法與 printf 相同。
返回值 / return value
在格式化成功時會得到轉換的總數量。
若得到負值,表示格式化失敗。
範例:
char
data[]="8*5=40";
int numberA,numberB,numberC;
sscanf(data,"%d*%d=%d",
&numberA, &numberB, &numberC);
printf("The numbers are :
%d\t%d\t%d.", numberA, numberB, numberC);
標頭檔:stdlib.h
這標頭檔提供文字型態的數字轉換成各種型別的數值,與前面在一串文字中擷取部份內容不同,請讀者自行參酌使用時機。
>-< 一個值的轉換
1.
double atof (const char* str);
2.
int atoi (const char * str);
3.
long int atol ( const char *
str );
參數 / Parameter
參數 / Parameter
A.
str
一個文字指標。函式會把這個文字的內容轉換成數值。
一個文字指標。函式會把這個文字的內容轉換成數值。
返迴值 / return value
依各函式的 return type 宣告。
範例:
char word[]="85";
int value = atoi(word);
printf("The value is : %d.",
value);
>-< 多個值的轉換
1.
double strtod (const char* str,
char** endptr);
2.
long int strtol (const char*
str, char** endptr, int base);
參數 / Parameter
參數 / Parameter
A.
str
一串以空白間格的數字組成的文字指標。
一串以空白間格的數字組成的文字指標。
B.
endptr
記錄目前讀取位置的指標的記憶體位址 (指標的指標) 。
記錄目前讀取位置的指標的記憶體位址 (指標的指標) 。
C.
base
整數的進位方式。2 ,8, 10, 16。0為 10 進位。
整數的進位方式。2 ,8, 10, 16。0為 10 進位。
返回值 / return value
依各函式的 return type 宣告。0 或 0.0 代表讀取失敗。
範例 A :
char word[]="85 100 850";
char* e = word;
while(1)
{
long int value = strtol(e,
&e, 0);
if(value == 0)
return;
printf("%d\t", value);
}
範例 B :
若文字內容包含 0 ,不方便以 value ==
0 為中斷迴圈的條件時,可改用此範例, end 為空格最後一次出現的位置。
char word[]="85 0 100 850";
char* e = word;
char* end = strrchr(word, ' ');
while(e <= end)
{
long int value = strtol(e,
&e, 0);
printf("%d\t", value);
}
此種函式的用法較為複雜。但日後進入檔案存取時,有時後必須從檔案中讀取大量文字資料再加以分析。到時候會不會這個函式,差別就很大了。
沒有留言:
張貼留言