Преобразование из инфиксной в префиксную нотацию в 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');
Уведомление:
- Я заменил var новой спецификацией ES6, const и let. (Всегда используйте const, используйте let, если вам нужно переписать)
- Я не уверен, хотите ли вы сохранить все символы, если они у вас есть, поэтому я сделал массив. Если вам нужен только один символ, вместо хранения массива просто сохраните одну переменную
- Добавьте дополнительный регистр для пробелов