2013-03-10 92 views
0

我很難想到從getline()函數提取的字符串中提取數字(如int或double)的方法。從字符串中提取數字(如整數或雙精度)

//例:

string data = ""; 
fstream inFile; 

//文件包含:

"Hello today is 83.3 degrees Fahrenheit." 

//使用getline函數從字符串數據

getline(inFile, data); 

//提取數

謝謝

+0

我從哪裏開始?我在哪裏可以找到關於此的教程? – user2125471 2013-03-10 23:31:20

+0

你有權訪問C++ 11或boost(兩者都包含正則表達式)嗎? – 2013-03-10 23:32:12

+0

我無法使用這些類型的庫。 – user2125471 2013-03-10 23:33:47

回答

0

你可以做以下

getline(inFile, data); 

std::istringstream iss; 
iss.exceptions(std::istream::failbit | std::istream::badbit); 

iss.str(data); 
double dTemp = 0; 

while(iss.good()){ 

    try{ 
    iss >> dTemp; 
    }  
    catch(std::istream::failure &e){ 
    /* Do your error check over here */ 
    } 

} 

你讓還想了解更多關於C++。檢查這link

希望這可以幫助。

+0

這將完全失敗,因爲OP字符串中的第一個字符不是數字,而是一些隨機單詞。 – us2012 2013-03-10 23:44:00

+0

謝謝,我同意你的意見。我們還需要檢查failbit和badbit。 – 2013-03-10 23:47:37

0

如果準備包含cstdio,則可以使用sscanf。

以下手冊頁鏈接將幫助您: -

http://linux.die.net/man/3/sscanf

char foo[] = "foo bar 12 baz"; 
int qux; 
sscanf(foo, "foo bar %d baz", &qux); 
// qux will be assigned 12 

char foo[] = "foo bar 12.5 baz"; 
double qux; 
sscanf(foo, "foo bar %lf baz", &qux); 
// qux will be assigned 12.5 

你顯然需要裁縫給你的情景和考慮各種安全問題。