繁体   English   中英

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

[英]Error when concatenating strings (C++)

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

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

这是有问题的行:

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

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

#include <string>
using namespace std

boost::format

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

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

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

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

有关将int转换为std::string其他方法,请参见将int附加到std :: string

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

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

您试图将字符串文字串联起来,就好像它们是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";

没有使用std::stringint operator+

解决您的问题的方法是使用std::stringstream ,它接受std::cout可以采用的任何operator<<

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

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

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

要引用所有其他答案,是的, 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!";

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM