2010年9月13日 星期一

字串處理問題 (String)

問題描述
      本題目為字串處理問題,程式需讀取一行英文字串,並依據讀入相關之指令,
來編修該字串。程式開始執行時,游標位於該英文字串的第一個字元。編修字串的指令
如下:
0 - 移動游標至目前所在行的第一個字元。
$ - 移動游標至字串的結束位置(即最後一個字元的下一個位置)。
x - 刪除目前游標所在位置的字元(如果在字串的結束位置則不做任何動作)。
s - 與游標所在位置的右邊字元做交換動作(如果游標在結束位置或結束位置的前一
     個位置,則不做任何動作)。
i -    在游標所在位置插入字元。如指令 ‘ix’ ,則是在游標目前所在位置前插入字元
     ‘x’,游標停留在原始的位置(即所插入‘x’ 的下一位置)。
u   - 如果游標所在位置之資料為英文字母,則將該字母改為大寫,並將游標往右移一
       個位置,如不是英文字母,則直接將游標往右移一個位置。
+  - 將游標向右移一個位置。
-   -   將游標向左移一個位置。
輸入說明 :
1. 第一行為要編修的英文字串(不超過250 個字元)。
2. 第二行為編修英文字串的指令。
輸出說明 :
請輸出處理完畢之字串。

範例輸入 :

hellol, I am a frog.
$-----xxxxipieirisioin0u++xs
範例輸出 :

Hello, I am a person.
                     貼文 BY 阿揚

1 則留言:

  1. Dim a(100) As String
    Dim b(100) As String
    Public Sub Form_Load()
    Open App.Path & "\in.txt" For Input As #1
    Open App.Path & "\out.txt" For Output As #2
    Line Input #1, x
    Line Input #1, d
    For i = 1 To Len(x)
    a(i) = Mid(x, i, 1)
    Next i
    For i = 1 To Len(d)
    b(i) = Mid(d, i, 1)
    Select Case b(i)
    Case Is = "0"
    k = 1
    Case Is = "$"
    k = Len(x) + 1
    Case Is = "x"
    If k < Len(x) Then
    a(k) = ""
    Call back(k, x)
    End If
    Case Is = "s"
    If k = Len(x) Or k = Len(x) + 1 Then
    Else
    st = a(k): a(k) = a(k + 1): a(k + 1) = st
    End If
    Case Is = "i"
    i = i + 1
    Call forward(k, x)
    a(k) = Mid(d, i, 1)
    k = k + 1


    Case Is = "u"

    a(k) = UCase(a(k))
    k = k + 1
    Case Is = "+"
    k = k + 1
    Case Is = "-"
    k = k - 1
    End Select
    Next i
    For i = 1 To Len(x)
    Print #2, a(i);
    Next i
    Close #1
    Close #2
    End Sub

    Public Sub back(p, s)
    For i = p To Len(s) + 1
    a(i) = a(i + 1)
    a(i + 1) = ""
    Next i
    End Sub

    Public Sub forward(ByVal p, s)
    For i = Len(s) + 1 To p + 1 Step -1
    a(i) = a(i - 1)
    a(i - 1) = ""
    Next i
    End Sub

    by 阿揚

    回覆刪除