我正在尝试获取存储在字符串变量中的大数字的每个数字的总和。因此,首先要做的是将每个元素转换为int并将其添加到总和中。所以我的问题是如何将字符串元素转换为int?我尝试使用std :: stoi但是我遇到了编译器错误。
无论如何,这是我的代码:
std::string x = "7825394359371498287";
int sum = 0;
for (int i = 0; i < x.size(); ++i) {
sum += std::stoi(x[i]);
}
答案 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';
}