如何将字符串的每个元素转换为int

时间:2015-04-23 08:14:30

标签: c++11

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

无论如何,这是我的代码:

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

3 个答案:

答案 0 :(得分:5)

问题是std::stoi需要一个字符串并且你给它一个字符。

通过了解所使用的文本编码可以轻松解决此问题,因为您可以轻松地将数字字符转换为相应的数字。以最常见的编码系统ASCII为例,如果您看到提供的链接中的表格会告诉您字符'7'具有ASCII值55,而字符{{} 1}}具有值'0'。这应该告诉您,要从字符48获取数字7,您只需从'7'(即'0')中减去'7',就像这样:

55 - 48

答案 1 :(得分:2)

您可以从char值中减去0

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

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

答案 2 :(得分:1)

尝试:

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';
}