You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将std::string字符存入std::vector<std::string>时出现ASCII码异常

问题:将std::string字符存入std::vectorstd::string时得到ASCII码而非字符本身

我想把std::string中的每个字符存入std::vectorstd::string(不用std::vector是因为后续要把字符组合,比如把'3'变成"30"),但实际存入的是字符对应的ASCII码,用C风格数组却能正常存字符串。

代码

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,可以用以下几种直接方式:

  1. 使用std::string构造函数(推荐,直观高效):
vecOfNum.push_back(std::string(1, numberAsArray.at(i)));
  1. 通过字符串拼接生成:
vecOfNum.push_back(std::string() + numberAsArray.at(i));
  1. 从原字符串截取单字符子串:
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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 13:22:13