将float复制到字符串

时间:2013-02-04 13:48:15

标签: c++ floating-point stringstream

我想将float的内容复制到C ++中的字符串。这不起作用。

#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;
}

我该怎么做?

6 个答案:

答案 0 :(得分:5)

我认为

 ss>>ans;

应该是

 ss<<ans;

编辑: 正如James Kanze所指出的,最好不要使用std::ostringstream代替std::stringstream,因为您没有使用第一个的双向功能。这样编译器也会抛出一个错误,你从字符串中提取ans而不是将其插入到字符串中。

答案 1 :(得分:2)

ss << ans;代替ss >> ans,它会起作用

要使用字符串流,您必须使用PUT TO运算符(<<),右侧有一个对象。这会将运算符转换为字符串(如果为特定类型定义了运算符)(已为具有operator<<对象的stringstream对象定义了此float

然后,将字符串流转换为字符串..您将成功将对象转换为字符串。

答案 2 :(得分: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";
}

答案 3 :(得分: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;
}

答案 4 :(得分:0)

看起来只有一行错了。你需要将float 流式传输到这样的stringsteram:

ss << ans;

答案 5 :(得分:0)

使用

strAns = std::to_string(ans);