暑假集训单切赛第二场 UVA 11988 Broken Keyboard (a.k.a. Beiju Text)(字符串处理)

一开始不懂啊,什么Home键,什么End键,还以为相当于括号,[]里的东西先打印出来呢。后来果断百度了一下。 悲催啊。。。

题意:给定一个字符串,内部含有'['和']'光标转移指令,'['代表光标移向文章头,']'代表光标移向文章尾,问最终在屏幕上显示的字符串序列是什么

思路:直接模拟一下即可,不过因为由于会可能移动到字符串开头以及结尾,所以我开了3个char数组。   

  str1存储由于'['的原因而打印在开头的字符,str3存储由于']'的原因打印在结尾的字符,str2则是存储一开始在没遇到'['或']'之前的字符。

 

    在A这道题的15个人里面,我写的竟然是最快的,82MS,就稍微沾沾自喜一下了哈。

 

#include <iostream>
#include <stdio.h>
#include <string.h>
#include <algorithm>
#include <stack>

using namespace std;
stack<char> s;
char str[100010];

char ans1[100010];
char ans2[100010];
char ans3[100010];
int main() {
    while(scanf("%s",str)!=EOF) {
        int len=strlen(str);
        //preidx表示ans1中最后索引所在的位置(它是从后往前移动的)
        //idx就是ans2中索引的位置
        //aftidx是指ans3中索引的位置
        int preidx=100000,idx=0,aftidx=0;
        for(int i=0; i<len; i++) {
            char ch=str[i];
            if(ch=='[') {
                //l记录'['之后的第一个字符的位置
                int l=++i;
                while(i<len && str[i]!='[' && str[i]!=']') {
                    //ans=str.charAt(i)+ans;
                    i++;
                }
                //最后i-1则是记录的是接下来遇到的'['或']'的前一个位置
                for(int j=i-1; j>=l; j--) {
                    ans1[preidx]=str[j];
                    preidx--;
                }
                i--;
            } else if(ch==']') {
                int l=++i;
                while(i<len && str[i]!='['&& str[i]!=']') {
                    i++;
                }
                for(int j=l; j<i; j++) {
                    ans3[aftidx]=str[j];
                    aftidx++;
                }
                i--;
            } else {
                ans2[idx]=str[i];
                idx++;
            }
        }
        for(int i=preidx+1; i<=100000; i++)
            printf("%c",ans1[i]);
        for(int i=0; i<idx; i++)
            printf("%c",ans2[i]);
        for(int i=0; i<aftidx; i++)
            printf("%c",ans3[i]);
        printf("\n");
    }
    return 0;
}

 

 

posted @ 2013-08-28 19:05  辰曦~文若  阅读(281)  评论(0编辑  收藏  举报