2011-11-03 72 views
1

我有以下代碼,但它只能將字符串轉換爲double。如果字符串包含一個字母,它會導致錯誤如何從字符串中解析double?

while (cin >> s){ 
     const char *c_ptr=s.c_str(); 
     d = atof(c_ptr); 
     v.push_back(d); 
    } 

我想輸入類似「A1.2 3 4B」,並已在載體填充「1.2 3 4」

+1

http://www.cplusplus.com/reference/clibrary/cstdio/sscanf/ –

+0

只有當您知道您提前閱讀了多少雙打以及該字符串具有非數字字符時,sscanf纔會有效。 –

+0

如果輸入是「4a1.2」,該怎麼辦?矢量中應該包含多少個數字?如果只有一個,它的價值應該是什麼? –

回答

1

這個什麼字符串:

1) replace all chars in the string that aren't digits or decimal points by spaces 
2) read doubles in a loop 

,因爲你得到了解析雙打擺脫之前的字母,就應該不再會導致的問題。

+0

聽起來是一個好主意。你如何使用替換函數來替換這些字符?我不能讓str.replace()在C++ – code511788465541441

+0

上工作。你可能會想在步驟2中使用istringstream,因爲上面的代碼只會從每個字符串中獲得一個double。以http://www.daniweb.com/software-development/cpp/threads/54367爲例。 –

+0

我能想到的最簡單的方法就是在for循環中自己完成替換。一個類似的例子可以在這裏看到http://www.daniweb.com/software-development/cpp/threads/349806 –