C語言實現字符串轉浮點函數的示例

  字符串不僅可以轉換為整數,也可以轉換為浮點數,字符串轉浮點數函數原型如下:

     float __cdecl __mingw_strtof (const char * __restrict__, char ** __restrict__);
     double __cdecl __mingw_strtod (const char * __restrict__, char ** __restrict__);

  strtof函數返回值是一個單精度浮點數,strtod返回值是一個雙精度浮點數。

  首先來看strtof函數,它的參數有兩個。第一個參數指向要解釋的以空字符結尾的字節字符串。第二個參數指向數字後的第一個字符。

  該函數首先丟棄盡可能多的空白字符,直到找到第一個非空白字符為止。然後從該字符開始,采用與浮點字面量類似的語法,盡可能多地使用有效的字符,並將其解釋為數值。指向最後一個有效字符之後的字符串其餘部分的指針存儲在函數第二個參數中。

有效的浮點值可以是以下值之一:

十進制浮點表達式。它由以下部分組成:

  • (可選)加號或減號
  • 非空十進制數字序列可選地包含小數點字符(由當前C確定locale)(定義有效數字)
  • (可選),e或者E跟隨可選的負號或加號和非空序列的十進制數字(定義指數)

二進制浮點表達式。它由以下部分組成:

(可選)加號或減號

  • 0x0X
  • 非空的十六進制數字序列可選地包含小數點字符(由當前C確定locale)(定義有效數字)
  • (可選),p或者P跟隨可選的負號或加號和非空序列的十進制數字(定義指數)

無窮大表達式。它由以下部分組成:

  • (可選)加號或減號
  • INF或者INFINITY無視事件

非數字表達式。它由以下部分組成:

  • (可選)加號或減號
  • NANNAN(char_sequence)忽略該NAN部分的情況。char_sequence隻能包含字母數字字符。結果是靜態的NaN浮點值。

任何其他可能被當前安裝的C接受的表達式 locale

  下面通過一個簡單的例子演示strtof函數的用法。

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char** argv)
{
	char str[30] = "-123.456    5.672451e3  acde";
	char *pEnd;
	float ret1,ret2;

	ret1 = strtof(str, &pEnd);
	ret2 = strtof(pEnd, &pEnd);
	printf("數字1是: %.3f\n", ret1);
	printf("數字2是: %.3f\n", ret2);
	printf("字符串部分是: %s \n", pEnd);

	return 0;
}

  代碼運行結果如下:

image.png

  在轉換數字的過程中,遇到空白字符函數就會退出。同時函數的第二個參數會存儲退出的位置,當再次調用函數的時候,就會接著上次退出的位置繼續轉換。

strtod函數和strtof函數用法基本一樣,可以直接在上面程序的基礎上修改。

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char** argv)
{
	char str[30] = "-123.456   5.672451e3  acde";
	char *pEnd;
	double ret1,ret2;

	ret1 = strtod(str, &pEnd);
	ret2 = strtod(pEnd, &pEnd);
	printf("數字1是: %lf\n", ret1);
	printf("數字2是: %lf\n", ret2);
	printf("字符串部分是: %s \n", pEnd);
        
	return 0;
}

  將返回值的類型修改為double類型就可以瞭,執行結果如下:

image.png

 到此這篇關於C語言實現字符串轉浮點函數的示例的文章就介紹到這瞭,更多相關C語言 字符串轉浮點函數內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: