Извлечь коэффициенты из биномиального выражения, введенного в виде строки в Scala
Я пытаюсь написать программу, которая может найти корни квадратного уравнения, используя Scala. Входными данными должно быть квадратное уравнение в форме ax^2+bx+c (например, 5x^2+2x+3) в виде строки.
Мне удалось закодировать вычисление корней, но у меня возникли проблемы с извлечением коэффициентов из входных данных. Вот код, который я написал для извлечения коэффициентов:
def getCoef(poly: String) = {
var aT: String = ""
var bT: String = ""
var cT: String = ""
var x: Int = 2
for (i <- poly.length - 1 to 0) {
val t: String = poly(i).toString
if (x == 2) {
if (t forall Character.isDigit) aT = aT + t(i)
else if (t == "^") {i = i + 1; x = 1}
}
else if (x == 1) {
if (t forall Character.isDigit) bT = bT + t(i)
else if (t == "+" || t == "-") x = 0
}
else if (x == 0) {
if (t forall Character.isDigit) cT = cT + t(i)
}
val a: Int = aT.toInt
val b: Int = bT.toInt
val c: Int = cT.toInt
(a, b, c)
}
}
1 ответ
Решение
Простое решение с помощью регулярных выражений:
def getCoef(poly: String) = {
val polyPattern = """(\d+)x\^2\+(\d+)x\+(\d+)""".r
val matcher = polyPattern.findFirstMatchIn(poly).get
(matcher.group(1).toInt, matcher.group(2).toInt, matcher.group(3).toInt)
}
Не обрабатывает все случаи (например, минус) и просто выдает ошибку, если ввод не соответствует шаблону, но он должен помочь вам.