NPSC補完計劃

登入註冊帳號.

請輸入帳號, 密碼以及預計登入時間
進階搜尋  

最新消息:

歡迎光臨NPSC補完計劃

+ NPSC補完計劃 » NPSC國中組 » NPSC2001國中組決賽
 [VB] NPSC 2001 決賽 pE XML語法檢查

作者 主題: [VB] NPSC 2001 決賽 pE XML語法檢查  (閱讀 2111 次)

lini

  • 高級會員
  • ****
  • 文章數: 101
    • 檢視個人資料
[VB] NPSC 2001 決賽 pE XML語法檢查
« 於: 十一月 29, 2009, 07:37:41 pm »

複雜的字串處理

沒有裁判測資
以下解法不一定完全正確

代碼: [選擇]
Sub main()
    Open "xmlcheck.in" For Input As #1
    Open "xmlcheck.out" For Output As #2
    Do
        Input #1, lns
        If lns = 0 Then Exit Do
        xml = ""
        For i = 1 To lns
            Line Input #1, ln
            xml = xml & ln
        Next
        t = Split(xml, ">")
        ReDim tg(256, 1)
        tcount = 0
        v = True
        For j = 0 To UBound(t) - 1
            ctxt = Split(t(j), "<")(1)
            If Left(ctxt, 1) = "/" And chkSpc(ctxt) = False Then
                tnme = Right(ctxt, Len(ctxt) - 1)
                For k = tcount - 1 To 0 Step -1
                    If tg(k, 1) = False Then shnme = tg(k, 0): tgindex = k: Exit For
                Next
                If tnme = shnme Then
                    tg(tgindex, 1) = True
                Else
                    v = False
                    Exit For
                End If
            ElseIf Right(ctxt, 1) = "/" And chkSpc(ctxt) = False Then
                tg(tcount, 0) = Left(ctxt, Len(ctxt) - 1)
                tg(tcount, 1) = True
                tcount = tcount + 1
            ElseIf Len(ctxt) > 0 Then
                t2 = Split(ctxt, " ")
                Select Case UBound(t2)
                    Case 0
                        tg(tcount, 0) = ctxt
                        tg(tcount, 1) = False
                        tcount = tcount + 1
                    Case 1
                        If t2(0) <> "" And t2(1) <> "" Then
                            t3 = Split(t2(1), "=")
                            If UBound(t3) = 1 Then
                                If t3(0) <> "" And Len(t3(1)) >= 2 Then
                                    If Left(t3(1), 1) = """" And Right(t3(1), 1) = """" Then
                                        tg(tcount, 0) = t2(0)
                                        tg(tcount, 1) = False
                                        tcount = tcount + 1
                                    Else
                                        v = False
                                        Exit For
                                    End If
                                Else
                                    v = False
                                    Exit For
                                End If
                            Else
                                v = False
                                Exit For
                            End If
                        Else
                            v = False
                            Exit For
                        End If
                    Case Else
                        v = False
                        Exit For
                End Select
            Else
                v = False
                Exit For
            End If
        Next
        If v = True Then
            For l = 0 To tcount - 1
                If tg(l, 1) = False Then v = False: Exit For
            Next
        End If
        Print #2, IIf(v = True, "1", "0")
    Loop
    Close
End Sub

Function chkSpc(str1)
    chkSpc = IIf(Replace(str1, " ", "") = str1, False, True)
End Function
記錄
+ NPSC補完計劃 » NPSC國中組 » NPSC2001國中組決賽
 [VB] NPSC 2001 決賽 pE XML語法檢查