c++ - 试图理解调车场算法

标签 c++ postfix-notation shunting-yard

我正在尝试执行 Shunting-yard algorithm所以我开始研究它。在这样做的同时,我发现了一些我不太理解的有趣文档:

    // Current token is a number, push 
    // it to stack for numbers. 
    else if(isdigit(tokens[i])){ 
        int val = 0; 

        // There may be more than one 
        // digits in number. 
        while(i < tokens.length() && 
                    isdigit(tokens[i])) 
        { 
            val = (val*10) + (tokens[i]-'0'); 
            i++; 
        } 

        values.push(val); 
    } 

我不明白为什么在 while 中,变量 val 被乘以 10 (val=(val*10)) .谁能帮我理解为什么算法必须这样做?

最佳答案

否则您只需添加数字即可。比如说你想要 123:你得到 1,乘以 10 得到 10,加上 2 得到 12,乘以 10 得到 120,然后加上 3 得到 123

如果您省略了 10 的乘法,您只会得到 1 + 2 + 3 == 6

关于c++ - 试图理解调车场算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54478184/

相关文章:

c++ - 关于c++的ostream

C++ 将后缀转换为中缀

c - 如何使用 while 循环扫描数字和运算符系列?

c++ - 调车场表达式解析器中的一元减号

c++ - 连接期间的mysql c++段错误

c++ - 最长的多米诺骨牌链/序列

c++ - 后续用C++对Files进行读写操作

将中缀表达式转换为后缀表达式,关联性总是从左到右吗?

c++ - 将字符串分配给 stack.top() 时出现段错误

java - 调车场算法实现中优先级值的含义