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

How to return string that contains string/int variables

本文关键字:int 变量 字符串 string 包含 何返回 返回      更新时间:2023-10-16

例如,如果我有这个小函数:

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+’

我做错了什么?我基本上是从class中复制了一个示例,并将其更改为适合我的功能。

您正在尝试将整数连接到字符串,而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");
}
#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;
}

使用ostringstream:

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

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

要理解这个问题,您必须知道在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();
}