2015-10-19 29 views
1
void getBaseCoord(string droneInfo, double& x, double& y, double& z){ 
    // x= stod(droneInfo.substr(31, 3)); 
    //y= stod(droneInfo.substr(34, 3)); 
    // z= stod(droneInfo.substr(37, 3)); 
    string strx, stry, strz; 
    strx = droneInfo.substr(31, 3); 
    stry = droneInfo.substr(34, 3); 
    strz = droneInfo.substr(37,3); 
    x = stof(strx); 
    y = stof(stry); 
    z = stof(strz); 

以上是我正在爲新手C++課程開發的一個項目的摘錄。我從一個輸入文件中讀取此字符串:將子字符串從輸入文件轉換爲雙精度值?

9673767892DroaninAlong4880021DO4.37.33.88.19.33.8U 

註釋掉的部分是到子從串線轉換成雙重價值,爲功能操作的目的的一種嘗試。然而,我無法以這種方式轉換這些,並且在編譯時出現錯誤,並且聲明stod未聲明(我猜它認爲它是一個變量?)

什麼是將子字符串轉換爲雙精度值的正確方法在一個函數內?

+0

您必須'#include '。如果你沒有通過'using namespace std;'來拉入標準庫,你必須在'std ::'前面加上前綴:'std :: stod(droneInfo.substr(31,3));' – Casey

回答

0

不確定stod()是什麼,但它高度暗示C library strtod()完全執行該操作。

請注意,函數需要兩個參數,儘管第二個參數可能爲NULL。第一個參數是C風格的字符串,所以可能需要轉換:

void getBaseCoord(string droneInfo, double& x, double& y, double& z) 
{ 
    x = strtod(droneInfo.substr(31, 3).cstr(), NULL); 
    y = strtod(droneInfo.substr(34, 3).cstr(), NULL); 
    z = strtod(droneInfo.substr(37, 3).cstr(), NULL); 
} 
+0

'std :: stod'是將字符串轉換爲double的'C++ 11'函數。 'float','long double','integer','long','unsigned'也有stof,stol,stoi,stol,stoul,stoull和stoull分別是「長」,「長」和「無符號長」。 – Casey

0

或者,你可以使用stringstream類。你會使用這樣的:

std::string strx = droneInfo.substr(31, 3); 
double x; 
std::stringstream ss; 
ss << strx; 
ss >> x; 

記住添加#include <sstream>此解決方案的工作,並.clear()你的stringstream對象,如果你要重用。你可以看到一個完整的例子here

相關問題