我正在尝试从函数返回一个字符串.这基本上将一些字符添加在一起并返回字符串表示.
string toString() {
char c1, c2, c3;
// some code here
return c1 + c2; // Error: invalid conversion from `char' to `const char*'
}
Run Code Online (Sandbox Code Playgroud)
可以返回布尔值,如return c1 =='x'.是不是可以返回字符串值?我知道它有可能像这样:
string result;
result.append(c1, c2);
return result;
Run Code Online (Sandbox Code Playgroud)
我是C++的新手,所以我认为必须有更优雅的解决方案.
不,你不能这样做,因为在一起添加两个字符不会给你一个字符串.它给你另一个char; 在这种情况下,'a'+'b'实际上会给你'?'(在Windows上有标准的CP_ACP代码页).Char是一个序数类型,就像整数一样,编译器只知道如何以最基本的方式添加它们.字符串是一个完全不同的野兽.
你可以做到,但你必须明确:
return string(1, c1) + string(1, c2)
Run Code Online (Sandbox Code Playgroud)
这将构造两个临时字符串,每个字符串初始化为作为第二个参数传递的字符的一次重复.由于operator+字符串被定义为连接函数,因此您现在可以执行所需的操作.
charC++(以及C)中的类型是整数类型.它们表现为整体类型.就像你5 + 3在代码中编写一样,你希望得到积分8作为结果(而不是字符串"53"),当你c1 + c2在上面的代码中写入时,你应该得到一个完整的结果 - 和的算术c1和c2.
如果您确实想要连接两个字符以形成字符串,则必须以不同方式执行此操作.有很多方法可以做到这一点.例如,您可以形成C样式的字符串
char str[] = { c1, c2, `\0` };
Run Code Online (Sandbox Code Playgroud)
这将隐式转换成std::string由
return str;
Run Code Online (Sandbox Code Playgroud)
或者你可以立即建立std::string(也可以通过几种不同的方式完成).
| 归档时间: |
|
| 查看次数: |
315 次 |
| 最近记录: |