devolver char1 + char2? ¿No es posible?
Pregunta
Estoy tratando de devolver una cadena de una función. Que básicamente agrega algunos caracteres y devuelve la representación de la cadena.
string toString() {
char c1, c2, c3;
// some code here
return c1 + c2; // Error: invalid conversion from `char' to `const char*'
}
Es posible devolver los valores booleanos como el retorno C1 == 'X'. ¿No es posible devolver los valores de las cadenas? Sé que es posible así:
string result;
result.append(c1, c2);
return result;
Soy nuevo en C ++, así que pensé que debe haber una solución más elegante.
Solución
No, no puedes hacer eso porque agregar dos chares juntos no te da una cadena. Te da otro char; en este caso 'a'+'b'
en realidad te da '├'
(En Windows con el estándar CP_ACP página de código). Char es un tipo ordinal, como los enteros y el compilador solo sabe cómo agregarlos de la manera más básica. Las cuerdas son una bestia completamente diferente.
Puedes hacerlo, pero debes ser explícito:
return string(1, c1) + string(1, c2)
Esto construirá dos cadenas temporales, cada una inicializada a una repetición del personaje pasada como el segundo parámetro. Ya que operator+
se define para que las cadenas sean una función de concatenación, ahora puede hacer lo que quiera.
Otros consejos
char
Los tipos en C ++ (así como en C) son tipos integrales. Se comportan como tipos integrales. Al igual que cuando escribes 5 + 3
En su código, espera obtener integral 8
Como resultado (y no una cadena "53"
), cuando escribes c1 + c2
En su código anterior, debe esperar obtener un resultado integral: la suma aritmética de c1
y c2
.
Si realmente quieres concatenar Dos caracteres para formar una cadena, debes hacerlo de manera diferente. Hay muchas formas de hacerlo. Por ejemplo, puede formar una cadena de estilo C
char str[] = { c1, c2, `\0` };
que se convertirá implícitamente en std::string
por
return str;
O puedes construir un std::string
De inmediato (que también se puede hacer de varias maneras diferentes).
Puede convertir cada char a una cadena y luego usar +:
return string(1, c1)+string(1, c2);
Alternativamente, String tiene la sobrecarga del operador + para funcionar con caracteres, para que pueda escribir:
return string(1, c1) + c2;
No importa qué método elija, deberá convertir el tipo integral char
a una cadena de estilo C (char*
) o una cadena de estilo C ++ (std::string
).
return string(1, c1) + c2;
Esto construye una cadena de 1 características, que contiene C1, luego agrega (sobrecargado para concatenar) C2 (creando otra cadena), luego la devuelve.
No, solo agrega los códigos de caracteres. Necesitas convertirlos en cuerdas.
Necesita crear una cadena a partir de los caracteres.
Y luego devuelve la cadena (en realidad una copia de la cadena)