【问题标题】:How to turn a string into int with more than 1 digit in c++?如何在c ++中将字符串转换为超过1位的int?
【发布时间】: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


【解决方案1】:
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';
}

【讨论】:

    猜你喜欢
    • 2016-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-11
    • 2013-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多