连接字符串时出错(C ++)

时间:2012-05-29 13:24:17

标签: c++ string

我正在尝试创建一个指向文件的字符串并收到此错误:

  

... / testApp.cpp:75:错误:类型'const char *'和'const char [5]'到二进制'operator +'的无效操作数

以下是有问题的一行:

    string path = "images/" + i + ".png";        

这似乎是一个相当简单的问题,但它让我很困惑。我还包括字符串标题:

#include <string>
using namespace std

6 个答案:

答案 0 :(得分:4)

您需要将i转换为std::string

string path = "images/" + boost::lexical_cast<string>(i) + ".png";

有关将int转换为std::string的其他方法,请参阅Append an int to a std::string

答案 1 :(得分:4)

boost::format

std::string str = (boost::format("images/%d.png") % i).str();

boost::format(FORMATTED_STIRNG) % .. %.. %..用于格式化字符串处理,请参阅wiki。此函数为您提供了一种特殊的boost格式,您需要使用其.str()成员函数将其强制转换为std :: string。

答案 2 :(得分:3)

改为使用stringstreamstd::string不支持整数的现成格式化。

std::stringstream ss;
ss << "images/" << i << ".png";
std::string path = ss.str();

答案 3 :(得分:1)

您正在尝试将字符串文字连接起来,就好像它们是std::string个对象一样。他们不是。在C ++中,字符串文字的类型为const char[],而不是std::string

要连接两个字符串文字,请将它们放在一起,不要使用运算符:

const char* cat = "Hello " "world";

要加入两个std::string个对象,请使用operator+(std::string, std::string)

std::string hello("hello ");
std::string world("world\n");
std::sting cat = hello + world;

还有operator+加入字符串文字和std::string

std::string hello("hello ");
std::string cat = hello + "world\n";

operator+std::string没有int

问题的解决方案是使用std::stringstreamoperator<<可以采用std::cout可以采取的任何std::stringstream spath; spath << "images/" << i << ".png"; std::string path = spath.str();

{{1}}

答案 4 :(得分:1)

使用C ++ 11,我们得到一组to_string函数,可以帮助将内置数值类型转换为std :: string。您可以在转化中使用它:

string path = "images/" + to_string(i) + ".png";         

答案 5 :(得分:0)

引用所有其他答案,是的,std::string没有内置支持附加整数。但是,您可以添加运算符来执行此操作:

template<typename T>
std::string operator +(const std::string &param1, const T& param2)
{
    std::stringstream ss;
    ss << param1 << param2;

    return ss.str();
}

template <typename T>
std::string operator +(const T& param1, const std::string& param2) {
    std::stringstream ss;
    ss << param1 << param2;

    return ss.str();
}

template <typename T>
std::string& operator +=(std::string& param1, const T& param2) 
{
    std::stringstream ss;
    ss << param1 << param2;

    param1 = ss.str();
    return param1;
}

唯一真正的缺点是你必须首先将一个文字转换成一个字符串,如下所示:

string s = string("Hello ") + 10 + "World!";