Question

J'essaye de renvoyer une chaîne d'une fonction. Qui ajoute essentiellement des caractères ensemble et renvoie la représentation des chaînes.

string toString() {
   char c1, c2, c3;
   // some code here
   return c1 + c2; // Error: invalid conversion from `char' to `const char*'
}

Il est possible de renvoyer des valeurs booléennes comme return c1 == 'x'. N'est-il pas possible de renvoyer des valeurs de chaîne? Je sais que cela est possible comme ceci:

string result;
result.append(c1, c2);
return result;

Je suis nouveau dans C ++, j'ai donc pensé qu'il devait y avoir une solution plus élégante autour.

Était-ce utile?

La solution

Non, vous ne pouvez pas le faire car ajouter deux charbon ensemble ne vous donne pas de chaîne. Il vous donne un autre char; dans ce cas 'a'+'b' vous donne réellement '├' (Sur Windows avec la norme Cp_acp page de code). Char est un type ordinal, comme les entiers et le compilateur ne sait que les ajouter de la manière la plus élémentaire. Les cordes sont une bête complètement différente.

Vous pouvez le faire, mais vous devez être explicite:

return string(1, c1) + string(1, c2)

Cela construira deux chaînes temporaires, chacune initialisée à une répétition du caractère passée comme deuxième paramètre. Depuis operator+ est défini pour que les chaînes soient une fonction de concaténation, vous pouvez maintenant faire ce que vous voulez.

Autres conseils

char Les types en C ++ (ainsi que dans C) font partie intégrante. Ils se comportent comme des types intégraux. Comme quand tu écris 5 + 3 Dans votre code, vous vous attendez à faire partie intégrante 8 comme le résultat (et non la chaîne "53"), lorsque vous écrivez c1 + c2 Dans votre code ci-dessus, vous devez vous attendre à obtenir un résultat intégral - la somme arithmétique de c1 et c2.

Si vous voulez vraiment enchaîner Deux caractères pour former une chaîne, vous devez le faire différemment. Il existe de nombreuses façons de le faire. Par exemple, vous pouvez former une chaîne de style C

char str[] = { c1, c2, `\0` };

qui sera implicitement converti en std::string par

return str;

Ou vous pouvez construire un std::string tout de suite (ce qui peut également être fait de plusieurs manières différentes).

Vous pouvez convertir chaque char en une chaîne puis utiliser +:

return string(1, c1)+string(1, c2);

Alternativement, String a la surcharge de l'opérateur + pour fonctionner avec des caractères, vous pouvez donc écrire:

return string(1, c1) + c2;

Quelle que soit la méthode que vous choisissez, vous devrez convertir le type intégral char à une chaîne de style C (char*) ou une chaîne de style C ++ (std::string).

return string(1, c1) + c2;

Cela construit une chaîne à 1 caractères, contenant C1, puis ajoute (surchargé pour concaténer) C2 (créant une autre chaîne), puis le renvoie.

Non, ils additionnent simplement les codes de caractère. Vous devez les convertir en chaînes.

Vous devez créer une chaîne à partir des caractères.
Puis renvoyer la chaîne (en fait une copie de la chaîne)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top