2011-08-22 10:09:38Morris

d252. 94北縣賽-4-字串處理問題 (String)

d252. 94北縣賽-4-字串處理問題 (String)

內容 :

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

輸入說明 :

1. 第一行為要編修的英文字串(不超過250 個字元)。
2. 第二行為編修英文字串的指令。

輸出說明 :

請輸出處理完畢之字串。

範例輸入 :

hellol, I am a frog.
$-----xxxxipieirisioin0u++xs

範例輸出 :

Hello, I am a person.

提示 :

出處 :

(管理:nanj0178)


作法 : 模擬

/**********************************************************************************/
/*  Problem: d252 "94北縣賽-4-字串處理問題 (String)" from                */
/*  Language: C                                                                   */
/*  Result: AC (0ms, 139KB) on ZeroJudge                                          */
/*  Author: morris1028 at 2011-08-22 09:53:11                                     */
/**********************************************************************************/


#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
main() {
    int a, b;
    char s[300], edit[300];
    while(gets(s)) {
        gets(edit);
        int Ls = strlen(s), Le = strlen(edit);
        int index, t;
        for(a = 0; a < Le; a++) {
            switch(edit[a]) {
                case '0':index = 0;break;
                case '$':index = Ls;break;
                case 'x': {
                    for(b = index; b < Ls-1; b++)
                        s[b] = s[b+1];
                    s[--Ls] = '\0';break;
                }
                case 's': {
                    if(index < Ls-1)
                        t = s[index], s[index] = s[index+1], s[index+1] = t;
                    break;
                }
                case 'i': {
                    for(b = Ls; b > index; b--)
                        s[b] = s[b-1];
                    s[index] = edit[++a], s[++Ls] = '\0', index++;
                    break;
                }
                case 'u': {
                    if(s[index] >= 'a' && s[index] <= 'z')
                        s[index] = s[index] - 'a' + 'A';
                    index++;
                    break;
                }
                case '+':index++;break;
                case '-':index--;break;
            }
        }
        puts(s);
    }
    return 0;
}