C++重载函数如何为返回值添加双引号包裹?
核心问题排查
你当前的实现存在两个不符合要求的硬伤:
- 重载函数的返回值类型设计不合理:带双引号的返回内容本质是包含非数字字符的文本,不可能用
int、double这类数值类型存储,原有函数从类型层面就无法承载带引号的结果 - 双引号的拼接位置错误:所有引号逻辑都写在了main的cout输出流中,不符合老师要求的「函数内部提前完成引号包裹,不修改cout输出逻辑」的规则
实现步骤
- 统一所有重载函数的返回值类型为
string,匹配带引号的文本返回需求 - 在每个重载函数内部完成值类型转换、双引号拼接的操作,不需要在main函数中做任何额外的引号拼接
- 修正原有代码中double参数版本的错误写法:C++中不能直接把数值强转为string,需要用标准库的
to_string()方法完成数值到字符串的转换
修正后可直接运行的代码
#include<iostream> #include<string> using namespace std; string iQuote(int); string iQuote(double); string iQuote(string); int x = 4; double y = 8.2; string name = "Dan"; int main() { // 移除所有手动拼接的转义双引号,直接输出函数返回值 cout << "The int argument is " << iQuote(x) << endl; cout << "The double argument is " << iQuote(y) << endl; cout << "the string argument is " << iQuote(name) << endl; return 0; } string iQuote(int a){ // 函数内部完成引号包裹,调用to_string转换整数为文本 return "\"" + to_string(a) + "\""; } string iQuote(double a){ // 函数内部完成引号包裹,调用to_string转换浮点数为文本 return "\"" + to_string(a) + "\""; } string iQuote(string a){ // 函数内部直接给传入的字符串包裹双引号 return "\"" + a + "\""; }
运行后实际输出效果和你之前手动拼接引号的效果完全一致,且所有双引号的添加动作都发生在cout执行前,完全符合授课老师的要求。
内容的提问来源于stack exchange,提问作者Gus Robins
相关产品推荐
相关产品推荐

