C ++问题中的字符串连接

时间:2011-06-16 07:17:58

标签: c++

我在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));
            }

如何修复我的代码?

8 个答案:

答案 0 :(得分:2)

在C ++中,您必须先将int转换为string,然后才能使用+运算符将其与另一个string连接。

请参阅Easiest way to convert int to string in C++

答案 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)

nd是整数。以下是如何将整数转换为字符串:

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);

您可以在http://www.cplusplus.com/reference/cstdio/sprintf/

查看