2013-02-04 59 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);