Вернуть Чар1 + Чар2? Разве это не возможно?

StackOverflow https://stackoverflow.com/questions/2542890

  •  23-09-2019
  •  | 
  •  

Вопрос

Я пытаюсь вернуть строку из функции. Который в основном добавляет некоторые чары вместе и возвращает представление строки.

string toString() {
   char c1, c2, c3;
   // some code here
   return c1 + c2; // Error: invalid conversion from `char' to `const char*'
}

Возможно вернуть логические значения, такие как возврат C1 == 'x'. Разве невозможно вернуть значения строк? Я знаю, что это возможно так:

string result;
result.append(c1, c2);
return result;

Я новичок в C ++, поэтому я подумал, что вокруг должно быть более элегантное решение.

Это было полезно?

Решение

Нет, вы не можете этого сделать, потому что добавление двух Char's вместе не дает вам строки. Это дает вам еще один символ; в таком случае 'a'+'b' на самом деле дает вам '├' (В окнах со стандартом CP_ACP Кодовая страница). Чар - это порядковый тип, например, целые числа, а компилятор знает, как добавить их самыми основными способами. Строки - совершенно другой зверь.

Вы можете сделать это, но вы должны быть явными:

return string(1, c1) + string(1, c2)

Это будет построить две временные строки, каждая из которых инициализируется к одному повторению символа, пройденного в качестве второго параметра. С operator+ Определяется для строк, чтобы быть функцией конкатенации, теперь вы можете делать то, что хотите.

Другие советы

char Типы в C ++ (а также в C) являются интегральными типами. Они ведут себя как интегральные типы. Так же, как когда ты пишешь 5 + 3 В своем коде вы ожидаете получить интегральную 8 как результат (а не строка "53"), когда вы пишете c1 + c2 В вашем коде выше вы должны ожидать, что получит неотъемлемый результат - арифметическая сумма c1 а также c2.

Если вы действительно хотите конкатенат Два символа, чтобы сформировать строку, вы должны сделать это по -другому. Есть много способов сделать это. Например, вы можете сформировать строку в стиле C

char str[] = { c1, c2, `\0` };

который будет неявно преобразован в std::string по

return str;

Или вы можете построить std::string сразу (что также можно сделать несколькими различными способами).

Вы можете преобразовать каждый Char в строку, а затем использовать +:

return string(1, c1)+string(1, c2);

Альтернативно, String имеет перегрузку оператора + для работы с символами, поэтому вы можете написать:

return string(1, c1) + c2;

Независимо от того, какой метод вы выберете, вам нужно будет преобразовать интегральный тип char к либо строке в стиле C (char*) или строка в стиле C ++ (std::string).

return string(1, c1) + c2;

Это строит строку 1-символа, содержащую C1, затем добавляет (перегружено в Concatenate) C2 (создание другой строки), затем возвращает ее.

Нет, они просто добавляют коды символов. Вам нужно преобразовать их в струны.

Вам нужно создать строку из Chars.
А затем вернуть строку (на самом деле копия строки)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top