我正在尝试从函数返回字符串。这基本上将一些字符加在一起并返回字符串表示。

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

可以返回布尔值,例如返回c1 =='x'。无法返回字符串值吗?我知道这样的可能是这样的:

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

我是C ++的新手,所以我认为周围必须有更多优雅的解决方案。

有帮助吗?

解决方案

不,您不能这样做,因为添加两个字符并不能为您提供一个字符串。它给你另一个炭;在这种情况下 'a'+'b' 实际上给了你 '├' (在带有标准的窗户上 CP_ACP 代码页)。 char是一种序数类型,例如整数和编译器,只知道如何以最基本的方式添加它们。弦是完全不同的野兽。

您可以做到,但是您必须明确:

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

这将构造两个临时字符串,每个字符串初始化为一个作为第二个参数传递的字符的重复。自从 operator+ 定义为字符串为串联函数,您现在可以做自己想做的事。

其他提示

char C ++(以及C中)中的类型是积分类型。它们的行为是不可或缺的类型。就像你写的时候 5 + 3 在您的代码中,您希望获得不可或缺的 8 结果(而不是字符串 "53"),当你写 c1 + c2 在上面的代码中,您应该期望获得不可或缺的结果 - 算术和 c1c2.

如果您真的想 加入 两个字符要形成一个字符串,您必须以不同的方式进行操作。有很多方法可以做到。例如,您可以形成C风格的字符串

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

将隐式转换为 std::string 经过

return str;

或者您可以构建 std::string 马上(也可以通过几种不同的方式完成)。

您可以将每个字符转换为字符串,然后使用 +:

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

另外,字符串具有 +运算符的过载以使用字符,因此您可以写下:

return string(1, c1) + c2;

无论您选择哪种方法,都需要转换积分类型 char 要么是C风格的字符串(char*)或C ++样式字符串(std::string).

return string(1, c1) + c2;

这将构造一个1个字符的字符串,其中包含C1,然后添加(与ConcateNate)c2(创建另一个字符串),然后返回。

不,他们只是加起来字符代码。您需要将它们转换为字符串。

您需要从字符中创建一个字符串。
然后返回字符串(实际上是字符串的副本)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top