【问题标题】:How to convert every element of a string to int如何将字符串的每个元素转换为int
【发布时间】:2015-04-23 16:32:47
【问题描述】:

我正在尝试获取存储在字符串变量中的大数字的每个数字的总和。所以要做的第一件事就是将每个元素转换为一个 int 并将其添加到总和中。所以我的问题是如何将字符串的元素转换为 int?我尝试使用 std::stoi 但出现编译器错误。

这是我的代码:

std::string x = "7825394359371498287";
int sum = 0;
for (int i = 0; i < x.size(); ++i) {
    sum += std::stoi(x[i]);
}

【问题讨论】:

    标签: c++11


    【解决方案1】:

    问题是std::stoi 想要一个字符串,而你给它一个字符。

    通过了解使用的文本编码可以轻松解决此问题,因为您可以轻松地将数字字符转换为其对应的数字。以最常见的编码系统ASCII 为例,如果您看到提供的链接中的表格,它将告诉您字符'7' 的ASCII 值是55,而字符'0' 的值是@987654327 @。这应该告诉您,要从字符 '7' 中获取数字 7,您所要做的就是从 '7'(即 55 - 48)中减去 '0',如下所示:

    sum += x[i] - '0';
    

    【讨论】:

    • 哦,现在我知道了。谢谢你的解释。
    【解决方案2】:

    您可以从 char 值中减去 0

    std::string x = "7825394359371498287";
    int sum = 0;
    for (int i = 0; i < x.size(); ++i) {
        sum += x[i] - '0';
    }
    

    stoi 给出错误,因为它适用于字符串而不是单个字符。

    【讨论】:

    • 你快一点
    【解决方案3】:

    尝试:

    std::string::size_type sz;
    std::string x = "7825394359371498287";
    int sum = 0;
    for (int i = 0; i < x.size();i++) {
        sum += std::stoi(x.substr(i,1), &sz);
    }
    

    其他方式:

    std::string x = "7825394359371498287";
    int sum = 0;
    for (int i = 0; i < x.size(); ++i) {
        sum += x[i] - '0';
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-21
      • 2018-07-01
      • 2021-06-15
      • 2019-12-07
      • 1970-01-01
      • 2018-05-16
      • 2015-11-12
      相关资源
      最近更新 更多