编辑代码

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)  
        }  
    }  
      
    // 解析失败,返回nil  
    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()