Преобразование из инфиксной в префиксную нотацию в JavaScript

Пожалуйста, помогите мне в JavaScript: программа, которую я кодирую, принимает выражение в префиксной нотации и выводит то же выражение в инфиксной нотации. Идея этой программы заключается в следующем:

если пользователь входит 1 + 2 ожидаемый результат + 1 2. Все допустимые символы+, -, *, /, and %. Количество чисел, которые может ввести пользователь, должно быть безграничным (например, если я введу1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10, программа должна вернуть + 1 2 3 4 5 6 7 8 9 10).

Не мог бы кто-нибудь помочь мне заполнить часть цикла комментариев, и если вы думаете, что есть лучший подход к проблеме полностью, я открыт для этого!

function infix(input) {
  var x = input.split(''); // splits each variable and stores it in an array
  var output = [];
  var final = " "; // will be used to store our infix expression
  for (var i = 0; i < x.length; i++) {
    //if x[i] is any of the following : "+, -, *, /, or %" , store it in array output at index 0
    //else if x[i] is a number : store it in an index of array output that is >= 1

  }
  for (var j = 0; j < output.length; j++) {
    var final = x[0] + x[j];
  }
  console.log(final);
}

infix("1 + 2 + 3")

1 ответ

Вот отрывок:

function infix(input){
  const specialCharacters = ['+', '-', '*', '/', '%'];
  const allCharacters = input.split('');

  const prefixes = [];
  const numbers = [];
  
  // go through all chars of input 
  for (let i = 0; i < allCharacters.length; i++) {
    const thisCharacter = allCharacters[i];

    // If the char is contained within the list of 'special chars', add it to list of prefixes.
    if (specialCharacters.includes(thisCharacter))
        prefixes.push(thisCharacter);

    // In case this is a whit space, just do nothing and skip to next iteration
    else if (thisCharacter === ' ') 
      continue;

    // If it's a number, just add it to the array of numbers
    else 
      numbers.push(thisCharacter);
  }
  
  // Merge both arrays
  const final = [...prefixes, ...numbers];

  // Back to string
  const finalString = final.join(' '); 

  console.log(final);
  console.log('String format: ' + finalString);
}

infix('1 + 2 - 3');

Уведомление:

  1. Я заменил var новой спецификацией ES6, const и let. (Всегда используйте const, используйте let, если вам нужно переписать)
  2. Я не уверен, хотите ли вы сохранить все символы, если они у вас есть, поэтому я сделал массив. Если вам нужен только один символ, вместо хранения массива просто сохраните одну переменную
  3. Добавьте дополнительный регистр для пробелов
Другие вопросы по тегам