将字符串元素转换为整数C++ [重复]
Posted
技术标签:
【中文标题】将字符串元素转换为整数C++ [重复]【英文标题】:Convert string element to integer C++ [duplicate] 【发布时间】:2014-02-24 00:51:02 【问题描述】:我有一串数字,我想把这些数字相乘
string myS = "731671765313";
int product = 1;
for(int i = 0; i<myS.length(); i++)
product *= myS[i];
如何将字符串元素转换为int,因为结果完全错误。 我尝试将其转换为 int 但徒劳无功。
【问题讨论】:
你不能只是随机地将一个 ASCII 字符“转换”为一个整数并期望从中得到一个数字!你认为(int)'a'
做了什么? ;)
您想将所有数字相乘吗?那么字符到整数的转换是(myS[i]-'0')
,否则这是重复的,你应该使用std::stoi
我试过atoi(myS[i])
和stoi(myS[i])
......错误
@CaptainObvlious,问题 really 似乎是关于将字符串中的数字相乘,而不是转换字符串。代码中的循环使这一点显而易见。
@chris 我同意。关闭投票被撤回。
【参考方案1】:
使用std::accumulate
(因为你正在累积元素的乘积,所以它的意图很明确)并记得'0'
不是0,而是数字字符是连续的。例如,在 ASCII 中,'0'
是 48,'1'
是 49,等等。因此,减去 '0'
会将该字符(如果是数字)转换为适当的数值。
int product = std::accumulate(std::begin(s), std::end(s), 1,
[](int total, char c) return total * (c - '0');
);
如果你不能使用 C++11,它很容易被替换:
int multiplyCharacterDigit(int total, char c)
return total * (c - '0');
...
int product = std::accumulate(s.begin(), s.end(), 1, multiplyCharacterDigit);
如果这些都不是一个选项,那么你所拥有的就差不多了:
int product = 1;
for(int i = 0; i<myS.length(); i++)
product *= (myS[i] - '0');
【讨论】:
您的解决方案需要符合 C++11 的语言实现,您应该指定。 @user2485710,据我所知,C++ 标签默认为 C++11,但我做了调整。 感谢最后一个答案。 @Misaki,除了需要 C++11 之外,其他任何一个是否存在特定问题,或者只是最后一个最适合您?我没有完全测试第二个,所以如果有问题,我很乐意修复它。 "如果你不会使用 C++",你忘了 11 ;顺便说一句,和你一样,我希望 C++11 更受欢迎,但旧的 C++ 标准仍然比 C++11 更受欢迎。以上是关于将字符串元素转换为整数C++ [重复]的主要内容,如果未能解决你的问题,请参考以下文章