Broken Keyboard (a.k.a. Beiju Text) 思路
问题:You’re typing a long text with a broken keyboard. Well it’s not so badly broken. The only problem with the keyboard is that sometimes the “home” key or the “end” key gets automatically pressed (internally). You’re not aware of this issue, since you’re focusing on the text and did not even turn on the monitor! After you finished typing, you can see a text on the screen (if you turn on the monitor). In Chinese, we can call it Beiju. Your task is to find the Beiju text.
输入:
There are several test cases. Each test case is a single line containing at least one and at most 100,000 letters, underscores and two special characters ‘[’ and ‘]’. ‘[’ means the “Home” key is pressed internally, and ‘]’ means the “End” key is pressed internally. The input is terminated by end-of-file (EOF).
输出:
For each case, print the Beiju text on the screen
示例输入
This_is_a_[Beiju]_text
[[]][][]Happy_Birthday_to_Tsinghua_University
示例输出
BeijuThis_is_a__text
Happy_Birthday_to_Tsinghua_University
题意:假如你在打字,home键和end键不定时就会被按下,用[代表home,用]代表end,最终打出来的结果是什么?
(home键功能:光标跳到行开始.end:光标跳到行末尾)
思路:
1.最简单的想法是用链表做,用一个指针记录当前输入光标,每读一个字母就加一个节点. 但是代码比较复杂,懒得敲,
另解2.
用字符串做.
假设 [ 是1, ] 是2,
定义一个变量mod存放这个状态,刚开始默认mod=2
把字符一个个的读到c数组.
如果再读到[ 或 ],就判断mod,
if(mod==2){
strcat (b,c);
更改mod为新状态;
memset将c置零;
}
if(mod=1){
strcat(c,b);
strcpy(b,c);
更改mod为新状态;
memset将c置零;
}
记得最后再多一步这个,把最后那段也放到b里.最后输出b即可.
另解3.确定字符串里哪部分先输出后输出
观察到输出时是最后面的 [后面的内容先输出,直到再遇到括号.其次是前一个[后面的内容,以此类推...等所有左括号的全输出完了,再把剩下的输出.
算法:
把字符串存到数组里:

先找到[字符的位置,存到b数组里,并把 [ 和] 都置0.注意,不要把]也存到b里.

然后根据b的索引,依次输出a[6]串,a[3]串,同时输出完就写0销毁,:

最后把剩下的输出即可,用putchar一个个的输出.
代码:
#include<stdio.h>
#include<string.h>
int main()
{
int b[100002];//存放 [ 的位置
char a[100002];//存放字符串
int k,i,lena;
while(gets(a)){//gets遇到EOF就返回0
k=1;
lena=strlen(a);
for(i=0;i<lena;i++){
if(a[i]=='['||a[i]==']'){
if(a[i]=='[') b[k++]=i; //把第K个 [ 的位置序号放到b[k]
a[i]='\0';//把[ ]位置写0
}
}
k--;//消去多加的那个 while(k){ //从最右边的 [ 开始,依次输出
printf("%s",a+b[k]+1);
memset(a+b[k]+1,0,strlen(a+b[k]+1));//输出完就写0销毁,防止下次重复输出
k--;
} for(i=0;i<lena;i++){//把剩下没有前置的字符全输出
if(a[i]!='\0') putchar(a[i]);
} putchar(10);//换行
}
return 0;
}
我用的第三种方法,注意memset的使用,以及循环的控制即可.
Broken Keyboard (a.k.a. Beiju Text) 思路的更多相关文章
- B - Broken Keyboard (a.k.a. Beiju Text)
Problem B Broken Keyboard (a.k.a. Beiju Text) You're typing a long text with a broken keyboard. Well ...
- uva - Broken Keyboard (a.k.a. Beiju Text)(链表)
11988 - Broken Keyboard (a.k.a. Beiju Text) You’re typing a long text with a broken keyboard. Well i ...
- 破损的键盘(悲剧文本)(Broken Keyboard(a.k.a. Beiju Text),Uva 11988)
破损的键盘(悲剧文本)(Broken Keyboard(a.k.a. Beiju Text),Uva 11988) 题意描述 你在输入文章的时候,键盘上的Home键和End键出了问题,会不定时的按下. ...
- N - Broken Keyboard (a.k.a. Beiju Text)(DFS,链表)
N - Broken Keyboard (a.k.a. Beiju Text) Time Limit:1000MS Memory Limit:0KB 64bit IO Format:% ...
- UVA——11988 Broken Keyboard (a.k.a. Beiju Text)
11988 Broken Keyboard (a.k.a. Beiju Text)You’re typing a long text with a broken keyboard. Well it’s ...
- UVA 11988 Broken Keyboard (a.k.a. Beiju Text)(链表)
题目代号:UVA 11988 题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&pa ...
- B - Broken Keyboard (a.k.a. Beiju Text) 数组模拟链表
You're typing a long text with a broken keyboard. Well it's not so badly broken. The only problem wi ...
- UVa 11988 Broken Keyboard (a.k.a. Beiju Text)(链表)
You're typing a long text with a broken keyboard. Well it's not so badly broken. The only problem wi ...
- Broken Keyboard (a.k.a. Beiju Text) UVA - 11988
You're typing a long text with a broken keyboard. Well it's not so badly broken. The only problem wi ...
随机推荐
- 蓝牙Profile的概念和常见种类(转)
蓝牙Profile Bluetooth的一个很重要特性,就是所有的Bluetooth产品都无须实现全部 的Bluetooth规范.为了更容易的保持Bluetooth设备之间的兼容,Bluetooth规 ...
- [转载]C# 常用日期时间函数(老用不熟)
原博地址:http://www.jb51.net/article/20181.htm --DateTime 数字型 System.DateTime currentTime=new System.Dat ...
- Autel MaxiSYS PRO MS908P Diagnostic System with Wireless VCI J-2534
You’re a professional mechanic, an enthusiast or and mechanic shop owner? Then you are here on the r ...
- Python笔记 #19# 实现bpnn
代码编辑&解释工具:Jupyter Notebook 快速入门 形象说明BP神经网络的用法(图片来自推特): Bpnn类最主要的三个方法: initialize方法,用于设定神经网络的层数.各 ...
- Web视频播放之video.js
h5这么火是有它的理由的,支持原生视频播放,但是目前兼容性还不是很好,因此使用js框架支持网站视频播放是比较不错的选择. 下载video.js,我们可以通过官网去下,但是官网在国外,我尝试了几次均下载 ...
- TCP之 TIME_WAIT和CLOSE_WAIT 状态 的原因分析和处理
转自:http://blog.csdn.net/shootyou/article/details/6622226 昨天解决了一个HttpClient调用错误导致的服务器异常,具体过程如下: http: ...
- 搭建一个简单的svn服务器(旧)
cenos 6.5,svnserver 1.6.11 默认可能已经安装,没有的话就: yum install svn -ysvnserver --version 创建一个svn仓库: svnadmin ...
- metasploit(MSF)对windows的ms17-010漏洞利用
picture 配置exploit msf > use exploit/windows/smb/ms17_010_eternalblue msf exploit(windows/smb/ms17 ...
- Requests 源码阅读笔记
models.py class Request(RequestHooksMixin): def __init__(self, method=None, url=None, headers=None, ...
- 奇怪的比赛|2012年蓝桥杯B组题解析第四题-fishers
(8')奇怪的比赛 某电视台举办了低碳生活大奖赛.题目的计分规则相当奇怪: 每位选手需要回答10个问题(其编号为1到10),越后面越有难度.答对的,当前分数翻倍:答错了则扣掉与题号相同的分数(选手必须 ...