javascript给定的数字字符串,DUP,POP,+,-

kgqe7b3p  于 2023-01-16  发布在  Java
关注(0)|答案(2)|浏览(101)

我该如何解决这个问题呢?我试着将字符串数字转换成数字,但在转换DUP和POP时遇到了困难

  • POP:计算机从堆栈中删除最上面的数字
  • DUP:机器将最上面的数字的副本压入堆栈
  • +:机器从堆栈中弹出最上面的元素,将它们相加,然后将总和压入堆栈。
  • :机器从堆栈中弹出最顶端的元素,减去它们,然后将结果压入堆栈。
export class App {
  test: string;
  input: string[];
  result: string[];
  array: string[];

  constructor() {
    this.test = `Word Machine Emulator`;
    this.input = ['23 DUP 4 POP 5 DUP + DUP + -', "5 6 + -"];
    this.result = [];
  }

  ngOnInit(){
   //result should be [23, 3]
  }

}

示例1:"23重复4弹出5重复-"

  • 23 =〉[23]
  • 达普=〉[23,23]
  • 4 =〉[23,23,4]
  • 持久性有机污染物=〉[23,23]
  • 5 =〉[23、23、5]
  • 重复次数=〉[23、23、5、5]
    • -=〉[二十三、二十三、零]

列表项

xkftehaa

xkftehaa1#

我认为你正在寻找类似下面的东西。一个快速的说明:+与应用于String时的Number()相同。

const solveInput = (inputString) => {
  const tokens = inputString.split(' ')
  let result = []
  for (const token of tokens) {
    if (Number.isNaN(+token)) {
      switch (token) {
        case 'POP':
          result.pop();
          break;
        case 'DUP':
          result.push(result[result.length - 1]);
          break;
        case '+':
          {
            currentValue = result.pop()
            previousValue = result.pop()
            result.push(currentValue + previousValue)
            break;
          }
        case '-':
          {
            currentValue = result.pop()
            previousValue = result.pop()
            result.push(currentValue - previousValue)
            break;
          }
      }
    } else {
      result.push(+token)
    }
  }
  return result
}

console.log(solveInput('23 DUP 4 POP 5 DUP + DUP + -'))
olmpazwi

olmpazwi2#

C++解决方案,运行基本测试用例。它可能会对你有帮助。我们不能在开关中使用字符串,所以我选择了If else if作为替代。

#include <algorithm>
#include <vector>
#include <stack>
#include<string>

#include<iostream>

using namespace std;

int solution(string s) {

    vector<string> token;
    stack<int> stack;
    string st = "";

    for(int i=0; i<s.size(); i++)
    {  
        if(s[i] == ' ' ) 
        {
            token.push_back(st); 
            st = "";
        }
        else if( i == (s.size()-1)){
            st += s[i];
            token.push_back(st);
        }
        else
        {
            st += s[i];
        }
    }

    //int x=0; int y= 0; int a = 0; int  b = 0;
    
    for(int i=0; i<token.size(); i++)
    {
    
        if(token[i] == "-")
        {
              int x = (int)stack.top(); stack.pop();
              int y = stack.top(); stack.pop();
              stack.push((x-y));

        }
        else if(token[i] == "+")
        {
            int a = stack.top(); stack.pop();
            int b = stack.top(); stack.pop();
            stack.push((a+b));
        }

        else if(token[i] == "DUP")
        {
            int a = stack.top();
            stack.push(a);

        }
        else if(token[i] == "POP")
        {
            stack.pop();
        }
        else
        {
            int x = stoi(token[i]);
            stack.push(x);
        } 
    }

    return stack.top();
} 

int main()
{
//  string str = "4 5 6 - 7 +";
    string str = "13 DUP 4 POP 5 DUP + DUP + -";
    cout<<"Result is : "<<solution(str);
    return 0;
}

相关问题