C++ ls函数中wrap字符转为ASCII数值问题求助
问题原因
你代码里的核心问题出在这两行:
wrap_open = std::to_string(wrap[0]); wrap_close = std::to_string(wrap[1]);
wrap[0]是char类型,而std::to_string没有专门处理char的重载,编译器会把char提升为int(也就是字符对应的ASCII值),所以'('(ASCII 40)被转换成了字符串"40",')'(ASCII 41)被转换成了"41",这就是你得到40hello, world, three41的原因。
解决方法
直接将char转换为std::string即可,不需要用std::to_string。修改这两行代码:
wrap_open = std::string(1, wrap[0]); // 用1个wrap[0]字符构造字符串 wrap_close = std::string(1, wrap[1]);
或者更简洁的写法:
std::string wrap_open(1, wrap[0]); std::string wrap_close(1, wrap[1]);
优化后的完整代码
你的循环逻辑可以进一步简化,不用区分vector长度,代码更简洁易读:
std::string ls(std::vector<std::string> vec, std::string wrap="()", std::string sep=", ") { std::string wrap_open(1, wrap[0]); std::string wrap_close(1, wrap[1]); std::string result = wrap_open; for (size_t i = 0; i < vec.size(); ++i) { if (i != 0) { result += sep; } result += vec[i]; } result += wrap_close; return result; }
这个版本能正确处理所有场景:
- 空vector:返回
() - 单个元素:返回
(hello) - 多个元素:返回
(hello, world, three)
内容的提问来源于stack exchange,提问作者Rammy Aly
相关产品推荐
相关产品推荐

