retornar char1 + char2? Não é possível?
Pergunta
Estou tentando devolver uma string de uma função. Que basicamente adiciona alguns chars e retorna a representação da string.
string toString() {
char c1, c2, c3;
// some code here
return c1 + c2; // Error: invalid conversion from `char' to `const char*'
}
É possível retornar valores booleanos como retornar c1 == 'x'. Não é possível retornar valores de string? Eu sei que é possível assim:
string result;
result.append(c1, c2);
return result;
Eu sou novo no C ++, então pensei que deveria haver uma solução mais elegante.
Solução
Não, você não pode fazer isso porque adicionar dois char's em conjunto não lhe dá uma string. Dá a você outro char; nesse caso 'a'+'b'
Na verdade, dá a você '├'
(no Windows com o padrão Cp_acp página de código). Char é um tipo ordinal, como números inteiros e o compilador sabe apenas como adicioná -los da maneira mais básica. As cordas são um animal completamente diferente.
Você pode fazer isso, mas você tem que ser explícito:
return string(1, c1) + string(1, c2)
Isso construirá duas seqüências temporárias, cada uma inicializada em uma repetição do caractere passada como o segundo parâmetro. Desde operator+
é definido para que as strings sejam uma função de concatenação, agora você pode fazer o que deseja.
Outras dicas
char
Os tipos de C ++ (assim como em C) são tipos integrais. Eles se comportam como tipos integrais. Assim como quando você escreve 5 + 3
No seu código, você espera ficar integral 8
como resultado (e não string "53"
), quando você escreve c1 + c2
No seu código acima, você deve esperar obter um resultado integral - a soma aritmética de c1
e c2
.
Se você realmente quer concatenar Dois caracteres para formar uma string, você precisa fazer isso de maneira diferente. Existem várias maneiras de fazer isso. Por exemplo, você pode formar uma corda de estilo C
char str[] = { c1, c2, `\0` };
que será implicitamente convertido para std::string
por
return str;
Ou você pode construir um std::string
imediatamente (o que também pode ser feito de várias maneiras diferentes).
Você pode converter cada char em uma string e depois usar +:
return string(1, c1)+string(1, c2);
Como alternativa, a String tem a sobrecarga do operador + para trabalhar com os caracteres, para que você possa escrever:
return string(1, c1) + c2;
Não importa qual método você escolher, você precisará converter o tipo integral char
para uma corda no estilo C (char*
) ou uma string de estilo C ++ (std::string
).
return string(1, c1) + c2;
Isso constrói uma sequência de 1 caractere, contendo C1 e adiciona (sobrecarregada para concatenar) C2 (criando outra string) e depois a retorna.
Não, eles apenas somam os códigos de caracteres. Você precisa convertê -los em cordas.
Você precisa criar uma string a partir dos chars.
E depois retorne a string (na verdade uma cópia da string)