我在C ++中遇到字符串连接问题,这是我的代码
map<double, string> fracs;
for(int d=1; d<=N; d++)
for(int n=0; n<=d; n++)
if(gcd(n, d)==1){
string s = n+"/"+d;// this does not work in C++ but works in Java
fracs.insert(make_pair((double)(n/d), s));
}
如何修复我的代码?
答案 0 :(得分:2)
在C ++中,您必须先将int
转换为string
,然后才能使用+运算符将其与另一个string
连接。
答案 1 :(得分:2)
试试这样。
stringstream os;
os << n << "/" << d;
string s =os.str();
答案 2 :(得分:2)
在您的情况下,使用流,字符串流:
#include <sstream>
...
std::stringstream ss;
ss << n << '/' << d;
稍后,完成您的工作后,您可以将其存储为普通字符串:
const std::string s = ss.str();
重要(侧面)注意:从不执行
const char *s = ss.str().c_str();
stringstream::str()
会生成一个临时 std::string
,根据标准,临时表会一直存在,直到表达式结束。然后,std::string::c_str()
为您提供一个指向以null结尾的字符串的指针,但根据The Holy Law,一旦std::string
(您从中接收到它)发生变化,C样式字符串就会变为无效。
这次,下次,甚至质量保证都可能有效,但在最有价值的客户面前爆炸。
std::string
必须存活直到战斗结束:
const std::string s = ss.str(); // must exist as long as sz is being used
const char *sz = s.c_str();
答案 3 :(得分:0)
n
和d
是整数。以下是如何将整数转换为字符串:
std::string s;
std::stringstream out;
out << n << "/" << d;
s = out.str();
答案 4 :(得分:0)
与Java不同,在C ++中没有operator+
显式将数字转换为字符串。在这种情况下,通常在C ++中完成的是......
#include <sstream>
stringstream ss;
ss << n << '/' << d; // Just like you'd do with cout
string s = ss.str(); // Convert the stringstream to a string
答案 5 :(得分:0)
您可以使用stringstream。
stringstream s;
s << n << "/" << d;
fracs.insert(make_pair((double)n/d, s.str()));
答案 6 :(得分:0)
还没有人建议,但您也可以查看boost::lexical_cast<>
。
虽然这种方法有时会因为性能问题而受到批评,但在您的情况下可能会很好,并且肯定会使代码更具可读性。
答案 7 :(得分:0)
我认为sprintf()是一种用于将格式化数据发送到字符串的函数,它将是一种更清晰的方法。就像你使用printf一样,但是使用c风格的字符串类型char *作为第一个(附加)参数:
char* temp;
sprint(temp, "%d/%d", n, d);
std::string g(temp);
查看