当前位置: 首页 > 知识库问答 >
问题:

将运算符从字符串推送到堆栈的Javascript

支淮晨
2023-03-14

我目前正在编写一个程序,在Javascript中,用户输入一个内缀符号表达式作为字符串,然后将其转换为后缀符号。我很难把每个操作员推到堆栈上。下面是与我的问题相关的代码的两个主要部分。

var input = readLine();
postfixCalc(input);

//main function that converts an infix notation function to postfix
function postfixCalc (input) {
  var operatorStack = new Stack();
  print("length of input: " + input.length);//DEBUG
  for (var i = 0; i < input.length; i++) {
    if (isOperator(input[i])) {
      operatorStack.push(input[i]);
      print("Pushing to stack: " + input[i]);//DEBUG
    } else {
      print("Not an operator: " + input[i]);//DEBUG
    }
    print("This is what the input character is: " + input[i]);//DEBUG
  }
}

//This function takes the current character being looked at in postfixCalc
//and returns true or false, depending on if the current character is 
//a valid operator
function isOperator(y) {
  //if y is a valid operator, return true.
  if (y===("+" || "-" || "*" || "/" || "(" || ")")) {
    print("What is being looked at: " + y);
    return true;
  } else {
    return false;
  }
}

如果(y==(“| |”-“| |”*“| |”/“| |”(“| |”)){从给定字符串推送到堆栈中,则只比较此行中的第一个字符。我一直用于测试的字符串是“3*5 6”。有没有想过为什么会这样?

共有1个答案

曾修真
2023-03-14

你的支票

 y===("+" || "-" || "*" || "/" || "(" || ")"))

只是

y==="+"

你要么把它当作

if (y==="+" || y==="-" || ...) 

或者可以将indexOf与数组或sting一起使用。

if (["+","-","*","/","(",")"].indexOf(y) > -1)

或正则表达式

 类似资料:
  • 我的C++代码,推入一个字符串到我的堆栈 当我和Java一起运行时,我收到了一份坠毁报告,有没有办法修复它? Java运行时环境检测到一个致命错误: SIGSEGV(0xB)(PC=0x00007F29421A0207,PID=18007,TID=0x00007F2942D3E700) JRE版本:Java(TM)SE运行时环境(8.0_144-B01)(build 1.8.0_144-B01)J

  • 问题内容: 有什么方法可以将堆栈跟踪作为字符串获取? 查看调试包(https://golang.org/pkg/runtime/debug/),它只能打印到标准输出。 问题答案: 将格式化的堆栈跟踪放到提供的中。然后,您可以将其转换为字符串。 您还可以使用,分配足够大的缓冲区来容纳整个堆栈跟踪,并使用将该跟踪放入其中,并返回缓冲区()。

  • 问题内容: 如何将字符串转换成运算符plus?谢谢! 问题答案: 使用查找表:

  • 目标 了解实例化 String 对象和设置其值的多种方法 了解字符串串联和方法链 熟悉 Java 语言的算术运算符 字符串 目前为止,您已经遇到过多种类型的 String。在 Java 语言中,字符串是 String 类型的一级对象,包含可帮助您处理它们的方法。 在 C 语言中,处理字符串需要大量精力,因为它们是您必须操作的 8 位字符组成的以 null 结尾的数组。(在字符串方面,与 C 语言最

  • 问题内容: 假设我有两个陈述。 哪个是堆栈内存,哪个存储在堆中? 两者之间有什么区别? 创建了多少个对象,内存中的引用如何? 最佳做法是什么? 问题答案: 所有对象都存储在堆中(包括其字段的值)。1个 局部变量(包括参数)始终包含原始值或引用,并存储在堆栈中。1个 因此,对于您的两行: 您将在堆上有两个对象(两个包含的String对象)和两个引用(每个对象一个)在堆栈上(提供且是局部变量)。 (实

  • 问题内容: 我对String串联感到困惑。 输出为: 50abc20 50abc1010 我想知道为什么在两种情况下都将 20 + 30 加在一起,但是 10 + 10 需要加上括号(s1)而不是串联到String(s2)。请在此处说明String运算符的工作方式。 问题答案: 加法保持关联。以第一种情况 在第二种情况下: