Concatenation operator in C++?

情到浓时终转凉″ 提交于 2019-12-11 07:32:52

问题


I have an application in which I need to combine strings within a variable like so:

int int_arr[4];
int_arr[1] = 123;
int_arr[2] = 456;
int_arr[3] = 789;
int_arr[4] = 10;
std::string _string = "Text " + int_arr[1] + " Text " + int_arr[2] + " Text " + int_arr[3] + " Text " + int_arr[4];

It gives me the compile error

Error C2210: '+' Operator cannot add pointers" on the second string of the expression.

As far as I can tell I am combining string literals and integers, not pointers.

Is there another concatenation operator that I should be using? Or is the expression just completely wrong and should figure out another way to implement this?

BTW I am using Visual Studio 2010


回答1:


You can do this in Java since it uses the toString() method automatically on each part.

If you want to do it the same way in C++, you'll have to explicitly convert those integer to strings in order for this to work.

Something like:

#include <iostream>
#include <sstream>

std::string intToStr (int i) {
    std::ostringstream s;
    s << i;
    return s.str();
}

int main (void) {
    int var = 7;
    std::string s = "Var is '" + intToStr(var) + "'";
    std::cout << s << std::endl;
    return 0;
}

Of course, you can just use:

    std::ostringstream os;
    os << "Var is '" << var << "'";
    std::string s = os.str();

which is a lot easier.




回答2:


Neither C nor C++ allow concatenation of const char * and int. Even C++'s std::string, doesn't concatenate integers. Use streams instead:

std::stringstream ss;
ss << "Text " << int_arr[1] << " Text " << int_arr[2] << " Text " << int_arr[3] << " Text " << int_arr[4];
std::string _string = ss.str();



回答3:


A string literal becomes a pointer in this context. Not a std::string. (Well, to be pedantically correct, string literals are character arrays, but the name of an array has an implicit conversion to a pointer. One predefined form of the + operator takes a pointer left-argument and an integral right argument, which is the best match, so the implicit conversion takes place here. No user-defined conversion can ever take precedence over this built-in conversion, according to the C++ overloading rules.).

You should study a good C++ book, we have a list here on SO.




回答4:


A string literal is an expression returning a pointer const char*.

std::stringstream _string_stream;
_string_stream << "Text " << int_arr[1] << " Text " << int_arr[2] << " Text " << int_arr[3] << " Text " << int_arr[4];
std::string _string = _string_stream.str();


来源:https://stackoverflow.com/questions/4882539/concatenation-operator-in-c

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!