Вернуть Чар1 + Чар2? Разве это не возможно?
Вопрос
Я пытаюсь вернуть строку из функции. Который в основном добавляет некоторые чары вместе и возвращает представление строки.
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.
А затем вернуть строку (на самом деле копия строки)