题目链接:Broken Keyboard (a.k.a. Beiju Text) - UVA 11988 - Virtual Judge (vjudge.net)
写这个题解的目的不是在于给广大网友们分享我的解题思路,而是希望通过我的练习可以和大家一起分享我学到的东西,目前我整理了三种方法:结构体链表法,数组链表法,还有就是list法
相信看到这里,大部分人都可以理解题意,这里就不再赘述,直接上方法:
1.结构体链表法
类似于struct node{
char ch;
struct node *next;
};
的结构
首先在使用字符串流逐个读取字符的前提下,对光标的位置进行移动,并将新读入的字符插入到光标的位置后面,这里光标也用了结构体指针的形式
2.数组链表法
前两种方法都来自这个大神,参考链接:http://t.csdn.cn/ufz0z
3.list法
这里就是用了STL库中的List,并结合迭代器实现任意位置插入元素,
#include <iostream>
#include <algorithm>
#include <sstream>
#include <string.h>
#include <cstdio>
#include<list>
#define maxm 10005
using namespace std;
int main()
{
string line;
while(cin>>line)
{
list<char> p;
list<char>::iterator it=p.begin();
for(auto i:line)
{
if(i=='[')
{
it=p.begin();
}
else if(i==']')
it==p.end();
else
{
it=p.insert(it,i);
it++;
}
}
for(it=p.begin();it!=p.end();it++)
cout<<*it;
cout<<endl;
p.clear();
}
return 0;
}
这么多方法,你确定不心动吗?嘿嘿嘿