我想将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;
}
我该怎么做?
答案 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);