Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/97.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 检查Swift中表达式中是否有平衡圆括号_Ios_Swift - Fatal编程技术网

Ios 检查Swift中表达式中是否有平衡圆括号

Ios 检查Swift中表达式中是否有平衡圆括号,ios,swift,Ios,Swift,我试图用swift写这篇文章,因为我找不到任何用swift写的解决方案,但似乎在实现这篇文章时遇到了障碍。 在pop和push函数中,我不确定Character是否是正确的返回/参数 class BalancedParam { struct stack { var top = -1 var items = [Character]() mutating func push(_ x: Character) { items.append(x)

我试图用swift写这篇文章,因为我找不到任何用swift写的解决方案,但似乎在实现这篇文章时遇到了障碍。 在pop和push函数中,我不确定
Character
是否是正确的返回/参数

class BalancedParam {
  struct stack {
    var top = -1
    var items = [Character]()

    mutating func push(_ x: Character) {
        items.append(x)
        if top == 99 {
            print("Stack full")
        } else {
            top += 1
            items[top] = x
        }
    }

    mutating func pop() -> Character {
        if top == -1 {
            print("Underflow error")
            return "0"
        } else {
            let element = items[top]
            top -= 1
            return element
        }
    }

    mutating func isEmpty() -> Bool {
        return (top == -1) ? true : false
    }
}

static func isMatchingPair(_ character1: Character, _ character2: Character) -> Bool {
    if character1 == "(" && character2 == ")"  {
        return true
    } else if character1 == "{" && character2 == "}" {
        return true
    } else if character1 == "[" && character2 == "]" {
        return true
    } else {
        return false
    }
}

static func areParenthesisBalanced(_ exp: [Character]) -> Bool {
    // Declare an empty character stack
    var st = stack()
    for i in 0..<exp.count {

        if exp[i] == "{" || exp[i] == "(" || exp[i] == "[" {
                st.push(exp[i])
        }

        if exp[i] == "}" || exp[i] == ")" || exp[i] == "]" {

            if st.isEmpty() {
                return false
            } else if !isMatchingPair(st.pop(), exp[i] ) {
                return false
            }

        }
    }
    if st.isEmpty() {
        return true //balanced
    } else {
        //not balanced
        return false
    }
  }
}

let exp: [Character] = ["{", "(", ")", "}", "[", "]"]
  if BalancedParam.areParenthesisBalanced(exp) {
    print("Balanced ")
  } else {
    print("Not Balanced ")
  }
类平衡参数{
结构堆栈{
var top=-1
变量项=[字符]()
变异函数推送(x:字符){
项目。附加(x)
如果top==99{
打印(“堆栈已满”)
}否则{
顶部+=1
项目[顶部]=x
}
}
变异func pop()->字符{
如果top==-1{
打印(“下溢错误”)
返回“0”
}否则{
let元素=项目[顶部]
top-=1
返回元素
}
}
变异函数isEmpty()->Bool{
返回值(顶部==-1)?真:假
}
}
静态函数匹配对(character1:Character,character2:Character)->Bool{
如果字符1==”(&&character2==”){
返回真值
}如果字符1==“{”&&character2==“}”{
返回真值
}如果字符1==”[“&&character2==”],则为else{
返回真值
}否则{
返回错误
}
}
静态函数是圆括号平衡的(exp:[字符])->Bool{
//声明一个空字符堆栈
var st=stack()

对于0中的i..您不能分配给空数组,即
项[top]=x
,只有当数组的大小
top+1
或更大时,才能使用此语法

所以这是不好的

var arr = [Int]()
arr[0] = 1
但这是

var arr = [Int]()
arr.append(0)
arr[0] = 1
由于数组大小有上限,另一个选项是初始化该大小的数组,然后继续使用原始语法

var arr = Array(repeating: 0, count: 99)
arr[0] = 1

您如何知道自己做错了什么?问题出在哪里?您的代码因“索引超出范围”错误而中止,因为
items
是一个空数组。进程被留在中断的位置,请使用“thread return-x”返回到表达式计算前的状态。谢谢修复。谢谢修复。