首页 > 代码库 > 哈尔滨理工大学2016新生赛I题

哈尔滨理工大学2016新生赛I题

这次我们要写一个简单的行编辑器,当按下‘#’时代表按下了一次退格符,当按下‘@’时代表一个退行符(使当前行的字符全部无效)。例如,假设从终端接收了这样的两行字符:

Whil#lr#e(s#*s)

outcha@putchar(*s=#++)

则实际有效的是下列两行:

While(*s)

putchar(*s++)

请你编写一个程序,输出实际有效的字符串。

 

 第一行是一个整数T,表示测试数据组数。

    接下来每行为一个字符串(不含空格和任何空白),表示输入的原始字符串 

 

输出最终的正确字符串。

 

2

Whil#lr#e(s#*s)

outcha@putchar(*s=#++)

 

While(*s)

putchar(*s++) 

 

 1 #include<fstream>
 2 #include<cstdio>
 3 #include<string>
 4 #include <iostream>
 5 using namespace std;
 6 
 7 string s;
 8 char a[5005];
 9 int p;
10 int main()
11 {
12     int T;
13     scanf("%d", &T);
14     while (T--) {
15         int i,len;
16         cin>>s;
17         len=s.size();
18         for(i=0;i<len;++i)
19         {
20             if(s[i]==@)
21                 p=0;
22             else if(s[i]==# && p>0)
23                 --p;
24             else if(s[i]!=#)
25                 a[++p]=s[i];
26         }
27         for(i=1;i<=p;++i)
28             cout<<a[i];
29         cout<<\n;
30     }
31     return 0;
32 }

 

哈尔滨理工大学2016新生赛I题