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.

¿Fue útil?

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)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top