簡體   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