题意:

输入一行字符,其中包含'[' 和 ‘]’, 意思为键盘上的home 和 end 键, 然后模拟字符在键盘上输入。 输入一行最终的结果

分析:

用数组模拟一个链表, 在链表的头尾插入字母然后输出即可, 方法需要多加练习才能练熟, 其实跟邻接表有点像。

为了方便起见,常常在链表的第一个元素之前放一个虚拟结点。

#include <bits/stdc++.h>
using namespace std;
const int maxl = + ;
int main()
{ char str[maxl];
int cur, last;
int next[maxl];//next[index] 就是str[index]的下一个字母是 str[next[index]]
//为了方便起见,常常在链表的第一个元素之前放一个虚拟结点。 所以从str+1开始
while(~scanf("%s", str+))
{
int len = strlen(str+);
next[] = ;//一开始next指向虚拟节点
cur = last = ;
for(int i = ; i <= len; i++){
if(str[i] == '['){
cur = ;
}
//光标位于cur后面 cur...|
else if(str[i] == ']'){
cur = last;
}
else{ next[i] = next[cur];
next[cur] = i;
/*注意这两句 当cur = 0, i = 1时,
next[1] = next[0] ------------ 把虚拟节点接到next[1]上
next[0] = 1 ------------ 把0的下一个接为1
这就实现了next0转移到了next1 next0 变为 1
*/
if(cur == last) last = i;
cur = i;
}
} for(int i = next[]; i != ; i = next[i]){
printf("%c", str[i]);
}
puts("");
}
}

最新文章

  1. hdu 5229 找规律
  2. 善用VS中的Code Snippet来提高开发效率
  3. 《Linux内核设计与实现》CHAPTER4阅读梳理
  4. XE6移动开发环境搭建之IOS篇(6):设置Mac OSX的网络。(有图有真相)
  5. Velocity魔法堂系列一:入门示例
  6. C++的辅助工具介绍 [转]
  7. VTL说明文档
  8. C# List
  9. mysql数据库sql优化
  10. 常用mysql命令
  11. 每天一个linux命令(27)--tar命令
  12. 关于在eclipse上部署Tomcat时出现8080等端口被占用问题的解决方法
  13. 201521123084 《Java程序设计》第10周学习总结
  14. Hype-v 共享文件办法
  15. 【C++】纯C++实现http打开网页下载内容的功能
  16. jQuery获取元素的方法
  17. MySQL 三 二进制安装
  18. [APC001] D Forest
  19. [AI]神经网络章3 损失函数
  20. Dependency Injection in ASP.NET Web API 2 Using Unity

热门文章

  1. [USACO 2011 Nov Gold] Above the Median【逆序对】
  2. DP Codeforces Round #260 (Div. 1) A. Boredom
  3. 动态链接库(DLL) 分类: c/c++ 2015-01-04 23:30 423人阅读 评论(0) 收藏
  4. Python的数据类型:list和tuple
  5. DEV—【GridControl添加按钮列】
  6. jQuery幸运大转盘_jQuery+PHP抽奖程序
  7. Unity笔记(4)自学第四、五天
  8. webstorm里直接调用命令行
  9. Swift3命名空间的实现
  10. Android学习——蓝牙通讯