• 暑假集训单切赛第二场 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("
    ");
        }
        return 0;
    }
  • 相关阅读:
    线程的五种状态
    ajax回调打开新窗体防止浏览器拦截有效方法
    mysql 如果字段为null自动返回需要的信息sql
    String 与 StringBuffer的区别
    Windows Git中文文件名乱码
    定义函数指针
    hello world
    C++析构函数调用异常问题研究
    企业开发的时候,有可能碰到的问题
    jmap
  • 原文地址:https://www.cnblogs.com/chenxiwenruo/p/3287803.html
Copyright © 2020-2023  润新知