2013-02-04 94 views
-2

我想將float的內容複製到C++中的字符串中。這不起作用。將float浮點複製到字符串

#include <iostream> 
#include <sstream> 

using namespace std; 

int main() { 
    float ans = getFloat(); 
    stringstream ss; 
    string strAns; 
    ss >> ans; 
    strAns = ss.str(); 
    cout << strAns << "\n";  // displays "0" 
    return 0; 
} 

我該怎麼做?

+2

'SS >>答;'應該是'SS << ANS ;' – UmNyobe

+2

注意在C++ 11中'std :: to_string()'的引入和'boost :: lexical_cast'的存在。 – hmjd

回答

1

至於其他的答案表明,它應該是ss << ans,因爲<<用於ostreams和>>用於istreams。

如果你只想打印浮點數到cout,你當然可以避免繞道而只寫std::cout << ans;,但我想你想要使用字符串,否則。

但是你應該知道通過Boost的和C++ 11的庫提供了簡化的:

#include <iostream> 
#include <string> //for std::string and std::to_string 
#include <boost/lexical_cast.hpp> 

using namesapce std; 
int main() { 
    float ans=getFloat(); 
    string strAns1 = boost::lexical_cast<string>(ans); //boost way 

    auto strAns2 = std::to_string(ans); //C++11 way 

    cout << "boost: " << strAns1 << "\n" 
     << "C++11: " << strAns2 << "\n"; 
} 
+0

你會推薦哪一個?我假設「boost」更快,「C++ 11」是標準方式嗎? – SamGamgee

+0

當然,結果保留在調用之間的流中,因此如果在循環外定義它,內容將保留。因此,您必須在每次迭代中重置流內的字符串,例如使用'ss.str(「」)',或者你可以在循環中定義流,這樣你就可以在每次迭代中得到一個新鮮的未被觸及的流。純粹主義者和乾淨的代碼專家會說後者(儘可能在有限的範圍內使用變量);性能悲觀主義者和預言者優化者會說前者只做一次串流初始化,而不是每次循環。 –

+1

@SamGamgee我推薦C++ 11的方式,因爲** 1 **是標準的,** 2 **您必須包含'''反正和** 3 ** stdandard庫至少可以因爲實施可能會採取一些實施定義的魔法,而這種魔法是無法提升的。 –

2

ss << ans;代替ss >> ans,也將努力

要與stringstreams工作,你必須使用投入運營(<<),與右側的對象。這會將操作符轉換爲字符串(如果操作符是針對特定類型定義的)(此operator<<已被定義爲stringstream對象,其對象爲float對象)。

然後,將字符串流轉換爲字符串..您將成功將該對象轉換爲字符串。

5

我覺得

ss>>ans; 

應該

ss<<ans; 

編輯: 正如詹姆斯甘孜注意,你最好當你不使用第一雙向功能使用std::ostringstream代替std::stringstream一。這樣編譯器也會拋出一個錯誤,你從字符串中提取ans而不是將它插入到字符串中。

+5

當然,如果他使用'std :: ostringstream',而不是雙向的'std :: stringstream',編譯器會告訴他。 –

0

您正在使用錯誤的操作:

#include <iostream> 
#include <sstream> 
using namespace std; 
int main() { 
    float ans=getFloat(); 
    stringstream ss; 
    string strAns; 
    ss << ans; 
    strAns=ss.str(); 
    cout<<strAns<<"\n";  // displays "0" 
    return 0; 
} 
0

只有一條線路由它的外觀錯在這裏。您需要將浮動流爲這樣的stringsteram:

ss << ans; 
0

使用

strAns = std::to_string(ans);