将字符串元素转换为整数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++ [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C++ 中将数字字符串转换为 int 数组 [重复]

如何在 C++ 中将字符串数组转换为整数数组?

将字符串转换为整数部分 C++ [关闭]

将矩阵字符串数组转换为整数矩阵? C++

将字符串转换为整数 [重复]

替代 itoa() 将整数转换为字符串 C++? [复制]