题
我正在尝试从函数返回字符串。这基本上将一些字符加在一起并返回字符串表示。
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
在上面的代码中,您应该期望获得不可或缺的结果 - 算术和 c1
和 c2
.
如果您真的想 加入 两个字符要形成一个字符串,您必须以不同的方式进行操作。有很多方法可以做到。例如,您可以形成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(创建另一个字符串),然后返回。
不,他们只是加起来字符代码。您需要将它们转换为字符串。
您需要从字符中创建一个字符串。
然后返回字符串(实际上是字符串的副本)