将std::string字符存入std::vector<std::string>时出现ASCII码异常
问题:将std::string字符存入std::vectorstd::string时得到ASCII码而非字符本身
我想把std::string中的每个字符存入std::vectorstd::string(不用std::vector
代码
template <typename numTyp> void numberAsRoman<numTyp>::convert() { numberAsArray = std::to_string(number); // numberAsArray是类的int类型成员,转换为std::string std::vector<std::string> vecOfNum; // 创建vector for(int i = 0; i < numberAsArray.length(); i++) // 循环赋值 { vecOfNum.push_back(std::to_string(numberAsArray.at(i))); // 将每个字符存入vector并打印 std::cout << vecOfNum.at(i) << " "; } std::cout << "\n\n\n"; }
执行结果
vector输出51和50,对应ASCII码:
51 - 3 50 - 2
问题原因
问题出在std::to_string(numberAsArray.at(i))这一行:numberAsArray.at(i)返回的是char类型,而std::to_string对char的重载会将其视作整数(即ASCII数值)进行转换,因此输出的是字符对应的ASCII码数字,而非字符本身。
解决方案
要将单个字符转换为单元素的std::string,可以用以下几种直接方式:
- 使用
std::string构造函数(推荐,直观高效):
vecOfNum.push_back(std::string(1, numberAsArray.at(i)));
- 通过字符串拼接生成:
vecOfNum.push_back(std::string() + numberAsArray.at(i));
- 从原字符串截取单字符子串:
vecOfNum.push_back(numberAsArray.substr(i, 1));
修正后的完整代码
template <typename numTyp> void numberAsRoman<numTyp>::convert() { numberAsArray = std::to_string(number); std::vector<std::string> vecOfNum; for(int i = 0; i < numberAsArray.length(); i++) { vecOfNum.push_back(std::string(1, numberAsArray.at(i))); std::cout << vecOfNum.at(i) << " "; } std::cout << "\n\n\n"; }
修正后执行会输出3 2 ,符合预期,后续也能方便地进行字符串组合(比如vecOfNum.at(0) + "0"即可得到"30")。
内容的提问来源于stack exchange,提问作者Michael
相关产品推荐
相关产品推荐

