-2

我想将浮点数的内容复制到 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;
}

我该怎么做呢?

4

6 回答 6

5

我认为

 ss>>ans;

应该

 ss<<ans;

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

于 2013-02-04T13:50:22.387 回答
2

ss << ans;而不是,ss >> ans它会工作

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

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

于 2013-02-04T13:50:21.340 回答
1

正如其他答案所示,它应该是ss << ans,因为<<用于 ostreams 并>>用于 istreams。

如果您只想将 float 打印到cout,您当然可以避免绕道而只是 write 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";
}
于 2013-02-04T13:58:06.537 回答
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;
}
于 2013-02-04T13:50:36.650 回答
0

从外观上看,这里只有一行错误。您需要像这样将浮点数流式传输字符串中:

ss << ans;
于 2013-02-04T13:50:37.427 回答
0

采用

strAns = std::to_string(ans);
于 2013-02-04T22:22:05.957 回答