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.

Foi útil?

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)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top