【发布时间】:2021-03-28 13:02:31
【问题描述】:
这是我的代码
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 时,它就不起作用了,因为它会先将 value 设置为 1 然后到 0 并且不会得到数字 10,有没有办法在 for 循环中做到这一点?我不能使用 atoi,因为有时字符串可以包含 '/' 或 '*' 之类的字符,我需要将它们放在另一个堆栈中。我想知道是否有办法让值变量包含整数 10。 我必须从字符串中保存整数和运算符。获取数字 1 然后 0 不是问题,问题是将 2 个整数转换为一个多位整数 1 0 转换为 10,将 2 5 转换为 25 等等。
【问题讨论】:
-
是的,有办法,但你必须做更多的工作。基本上,您需要一次停止处理一个字符的字符串。例如,当您找到一个数字时,您可以在字符串中向前扫描以查看您有多少位,然后一次将它们全部转换,然后将组合值压入堆栈。
-
算法一定要实现吗?或者你可以使用标准库吗?
-
如果这是一个作业,您可能必须构建一个逐字符解析器。
-
@john 这听起来很像使用
std::stringstream会免费提供给你的东西。 -
好吧,如果
atoi()对您不起作用,请将其提高一个档次并使用strtol():除了返回的值之外,它还会更新一个结束指针,这样您就知道如果第三个参数是非nullptr(您还需要传递基数第三个参数)。
标签: c++ arrays string c++11 integer