Swift字符串任务



我有一组方程:

let tasks = ["11 + 14 = 25", "2 + 2 = 5"]

以及功能

func checkTask(task: String) throws -> String 

哪个应该:

  1. 如果方程是正确的,则返回"0";Ok";,否则返回";正确答案:">
  2. 如果字符串不是等式,则抛出描述错误";这不是一个方程式

等式等号左边有两个数字,右边有一个数字。运算:加法和减法。

我该怎么做?

这是一个快速实现:它处理具有2个整数值和一个运算符的表达式,其中运算符为+-*/。表达式看起来像<value> <operator> <value> = <value>。表达式左侧的值是整数,但右侧的值可以是浮点值。(例如try? checkTask(task: "7 / 2 = 3.5")将打印OK(

我认为如果你想做一些更高级的事情,这是一个很好的起点。

enum Error: Swift.Error {
case malformed
}
func checkTask(task: String) throws -> String {
let operations = "*/+-"
let split = task.replacingOccurrences(of: " ", with: "").split(separator: "=")
guard let resultString = split.last,
let expressionString = split.first else {
throw Error.malformed
}
let expression = expressionString.split { character in
operations.contains(character)
}

guard let operationString = expressionString.first(where: { operation in operations.contains(operation) }),
let lhsString = expression.first,
let rhsString = expression.last,
let equationResult = Double(String(resultString)),
let lhs = Double(lhsString),
let rhs = Double(rhsString) else {
throw Error.malformed
}

var operation: (Double, Double) -> Double
switch operationString {
case "+":
operation = (+)
case "-":
operation = (-)
case "*":
operation = (*)
case "/":
operation = (/)
default:
throw Error.malformed
}
let result = operation(lhs, rhs)
guard result == equationResult else {
return "Correct answer: (result)"
}
return "OK"
}
let tasks = ["11 + 14 = 25", "2 + 2 = 5"]
let first = try? checkTask(task: tasks.first!) // "OK"
let second = try? checkTask(task: tasks.last!) // "Correct answer: 4.0"

如果你想在描述中出现错误,你必须自己进行修改。

最新更新