c++ - 如何在c ++中将字符串转换为超过1位的int?
问题描述
这是我的代码
for (unsigned int i = 0; i < form.size(); i++)
if (isdigit(form[i]))
{
value=form[i] - '0';
operand.push(value) //this is a stack
}
但它只在你有一个 1 位数的 int 时才有效,假设表单字符串有 1,它工作得很好,但是当字符串得到 10 时,它就不起作用了,因为它会先将值设置为 1,然后设置为 0 和不会得到数字 10,有没有办法在 for 循环中做到这一点?我不能使用 atoi,因为有时字符串可以包含 '/' 或 '*' 之类的字符,我需要将它们放在另一个堆栈中。我想知道是否有办法让值变量包含整数 10。我必须从字符串中保存整数和运算符。获取数字 1 然后 0 不是问题,问题是将 2 个整数转换为一个多位整数 1 0 转换为 10,将 2 5 转换为 25 等等。
解决方案
for (int i = 0, temp = 0; i <= form.size(); i++) {
if (i == form.size() || !isdigit(form[i])) {
operand.push(temp);
temp = 0;
}
temp = (temp * 10) + form[i] - '0';
}
推荐阅读
- javascript - 初始化后中风随机化变化
- python - 对于矩阵的循环定义?
- reactjs - 未找到模块
- php - AES-128 OFB 使用 mcrypt (PHP) 和 pycryptodome (Python) 不同
- sql - 如何在只有一个属性并共享相同外键的 2 个表中插入必然不同的值?
- java - 添加值和数组长度的难度
- javascript - jquery 按钮在其包含的 div 被清空并重新填充后不起作用
- java - 冒泡排序不适用于 Java,元素没有交换
- python - 能够跟随非常急转弯和路口的线跟随机器人(带摄像头)的算法
- c++ - 如何正确使用 string::erase