import Foundation
func printComplex(_ c: Complex) {
print("复数:\(c.real) + \(c.imaginary)i")
}
func parseComplexFromString(_ input: String) -> Complex? {
let scanner = Scanner(string: input)
var realPart: Double = 0.0
var imaginaryPart: Double = 0.0
var hasPlusSign = false
if scanner.scanDouble(&realPart) {
if scanner.scanString("+", into: nil) {
hasPlusSign = true
} else if scanner.scanString("-", into: nil) {
hasPlusSign = false
}
if scanner.scanDouble(&imaginaryPart) && scanner.scanString("i", into: nil) && scanner.atEnd {
if !hasPlusSign {
imaginaryPart = -imaginaryPart
}
return Complex(real: realPart, imaginary: imaginaryPart)
}
}
return nil
}
func applyOp_Complx(_ op: Character, rhs: Complex, lhs: Complex) -> Complex? {
switch op {
case "+": return lhs + rhs
case "-": return lhs - rhs
case "*": return lhs * rhs
case "/": return rhs != Complex(real: 0, imaginary: 0) ? lhs / rhs : nil
default: return nil
}
}
func handleComplexOperations() {
print("请输入第一个复数(格式:a+bi 或 a-bi):")
if let input1 = readLine()?.trimmingCharacters(in: .whitespacesAndNewlines),
let complex1 = parseComplexFromString(input1) {
print("请输入操作符(+、-、*、/):")
if let op = readLine()?.first,
op.isLetter {
print("请输入第二个复数(格式:a+bi 或 a-bi):")
if let input2 = readLine()?.trimmingCharacters(in: .whitespacesAndNewlines),
let complex2 = parseComplexFromString(input2) {
if let result = applyOp_Complx(op, rhs: complex1, lhs: complex2) {
print("结果:")
printComplex(result)
} else {
print("无效的操作符或除以零错误。")
}
} else {
print("无效的第二个复数格式。")
}
} else {
print("无效的操作符。")
}
} else {
print("无效的第一个复数格式。")
}
}
handleComplexOperations()