如何返回包含string / int变量的字符串

时间:2011-11-28 14:11:46

标签: c++ string

例如,如果我有这个小功能:

string lw(int a, int b) {    
    return "lw $" + a + "0($" + b + ")\n";
}

....并在我的main函数中调用lw(1,2)我希望它返回"lw $1, 0($2)"

但我一直收到错误:invalid operands of types ‘const char*’ and ‘const char [11]’ to binary ‘operator+’

我做错了什么?我几乎从类中复制了一个例子,并将其改为适合我的功能。

5 个答案:

答案 0 :(得分:11)

您正在尝试将整数连接到字符串,而C ++无法转换此类不同类型的值。最好的办法是使用std::ostringstream构造结果字符串:

#include <sstream>

// ...

string lw(int a, int b)
{
    ostringstream os;
    os << "lw $" << a << "0($" << b << ")\n";
    return os.str();
}

如果您有Boost,则可以使用Boost.Lexical_cast

#include <boost/lexical_cast.hpp>

// ...

string lw(int a, int b)
{
    return
        string("lw $") +
        boost::lexical_cast<std::string>(a) +
        string("0($") +
        boost::lexical_cast<std::string>(b) +
        string(")\n");
}

现在使用C ++ 11及更高版本,有std::to_string

string lw(int a, int b)
{
    return
        string("lw $") +
        std::to_string(a) +
        string("0($") +
        std::to_string(b) +
        string(")\n");
}

答案 1 :(得分:2)

#include <sstream>

string lw(int a, int b) {    
    std::string s;
    std::stringstream out;
    out << "lw $" << a << "0($" << b << ")" << endl;
    s = out.str();
    return s;
}

答案 2 :(得分:2)

使用ostringstream:

#include <sstream>
...
string lw(int a, int b) {
    std::ostringstream o;
    o << "lw $" << a << "0($" << b << ")\n";
    return o.str();
}

答案 3 :(得分:1)

您不能将字符串文字(如“hello”)添加到整数。这就是编译器对你说的。这是对您的问题的部分答案。请参阅如何在其他帖子中完成您想要的内容。

答案 4 :(得分:0)

要理解这个问题,您必须知道在C ++中,像"lw $"这样的字符串文字被视为继承自C语言的const char[]。但是,这意味着您只获得为数组定义的运算符,或者在这种情况下是数组降级到指针的情况。

所以会发生什么是你有一个字符串文字,然后添加一个整数,创建一个新的指针。然后,您尝试添加另一个字符串文字,该文字再次降级为char*。你不能在一起添加两个指针,然后产生你看到的错误。

您正在尝试将整数格式化为带有分隔文本的字符串格式。在C ++中,这样做的规范方法是使用stringstreams:

#include <sstream>

string lw(int a, int b)
{
    std::ostringstream os;
    os << "lw $" << a << "0($" << b << ")\n";
    return os.str();
}