Как я могу объединить несколько Чар в стринг?

Я делаю синтаксический анализ строк и, по сути, то, что я хотел бы сделать, это что-то вроде этого:

string signature = char[index+1] + '/' + char[index+2];

но вы не можете сделать конкатенацию строк на char, так что приводит меня к этому вопросу, как я могу имитировать конкатенацию на char?

Я знаю, что библиотека строк в C++ имеет append, но я не думаю, что это работает для моего случая. Есть идеи?

5 ответов


вы можете объединить символы в std::string, вам просто нужен один из операндов, чтобы быть std::string, в противном случае вы добавляете целые числа.

std::string signature = std::string() + char_array[index+1] + '/' + char_array[index+2];

это работает только если первый или второй операнд в цепочке-это std::string. Это приведет к первому вызову operator+ возвращение std::string, а остальные последуют их примеру. Таким образом, это не дает ожидаемых результатов:

std::string signature = char_array[index+1] + '/' + char_array[index+2] + std::string();

В C++11 вы можете сделать:

std::string signature{chars[index+1], '/', chars[index+2]};

Не уверен, насколько это будет полезно в реальном коде, но он имеет дело с вашим примером.


вы можете объединить символы и строки C-стиля в существующую строку довольно легко:

string signature;

signature += char_array[index + 1];  // append character from char_array[index+1]
signature += '/';
signature += char_array[index + 2];  // append character from char_array[index+2]

вам просто нужно обеспечить левую сторону + или += это std::string.


в дополнение к решению Стива и Бенджамина, вы также можете использовать std::stringstream:

std::stringstream ss;
ss << char_array[index + 1] << '/' << char_array[index + 2];
std::string s = ss.str();

Если вы делали это с .Net, массив символов можно использовать в конструкторе строк.

http://msdn.microsoft.com/en-us/library/ttyxaek9 (v=против 110).aspx