2010-12-22 79 views
0

我不知道這裏發生了什麼事。我將兩個字符串轉換爲雙精度值,第一個字符串總是經過,但第二個字符串沒有,並且切換它們的方式並不重要! 下面的代碼:幫助轉換字符串加倍?


    #include <iostream> 
    #include <math.h> 
    #include <string> 
    #include <sstream> 
    using namespace std; 

    int main() { 
     string temp; 
     double ax,bx,cx,ay,by,cy; 
     cout << "Enter x and y for point 1 (separated by a comma)"; 
     cin >> temp; 
     int where=temp.find(","); 
     int hmm=temp.length()-where; 
     cout << hmm << endl << where << endl; 
     cin.get(); 
     stringstream ss; 
     string stAx,stAy; 
     stAx= (temp.substr(0,where));stAy = (temp.substr(where+1, hmm-1)); 
     ss << stAx;ss >> ax; 
     ss << stAy;ss >> ay; 
     cout << "Ax: " << ax << endl; 
     cout << "Ay: " << ay << endl; 

     system("pause"); 
     return 0; 
    } 


任何人都可以找出我做錯了嗎?

在此先感謝!

+1

看來你的代碼的一部分丟失,所以我有猜測你的問題是什麼。但你有沒有看過boost :: lexical_cast()呢? – Axel 2010-12-22 19:09:32

回答

3

你的問題是你對ax和ay都使用相同的字符串流。你需要ssA和ssY。或者試試ss.flush()

+0

對不起,不具體。我想要做的是接收一個由逗號分隔的2個數字的字符串,然後通過使用string :: substr將它們分成2個數字(雙精度)。我知道,我的代碼有點混亂。 主要問題在於我使用stringstream的部分地方。 \t ss << stAx;ss >> ax; \t ss << stAy;ss >> ay; 這應該通過stringstream將字符串stAx轉換爲雙斧頭,並且工作正常,但stAy和ay部分不起作用 – Joe 2010-12-22 19:19:14

1

簡單的方法是使用boost :: lexical_cast。

如果boost不可用,那麼你可以編寫自己的(不如可以轉換爲字符串並進行錯誤檢查的boost版本,但對簡單程序來說足夠了)。

#include <sstream> 
#include <iostream> 

template<typename T> 
inline T MyCast(std::string const & value) 
{ 
    std::stringstream ssinput(value); 

    T result; 
    ssinput >> result; 

    return result; 
} 

int main() 
{ 
    double x = MyCast<double>("12.345"); 
    std::cout << x; 
} 
0

呃,我敢肯定,你的問題是固定的,我不明白的是爲什麼你不能簡單地做:

double dx, dy; 
    cout << "enter x and y co-ordinates (separated by a space): " << endl; 
    cin >> dx >> dy; 

    cout << "dx: [" << dx << "], dy:[" << dy << "]" << endl;