Извлечь коэффициенты из биномиального выражения, введенного в виде строки в 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)
}

Не обрабатывает все случаи (например, минус) и просто выдает ошибку, если ввод не соответствует шаблону, но он должен помочь вам.

Другие вопросы по тегам