题目链接:http://acm.pku.edu.cn/JudgeOnline/problem?id=2608
这个题主要涉及了“连续元素只处理一个”的解决方法,这个思想从学习STL中得来。就是对逐个处理的一个改进,逐个处理时扫描指针逐一递增,而连续元素只处理一个,需要程序对扫描指针进行适当的控制,具体方法是:
每扫描到一个元素,对它进行必要的处理后,就移动指针直到下一个不等于该元素的元素,然后进行条件判断,看是否继续。
#include <iostream>
#include <string>
using namespace std;
int Num(char ch)
{
switch(ch)
{
case 'B':
case 'F':
case 'P':
case 'V':
return 1;
case 'C':
case 'J':
case 'G':
case 'K':
case 'Q':
case 'S':
case 'X':
case 'Z':
return 2;
case 'D':
case 'T':
return 3;
case 'L':
return 4;
case 'M':
case 'N':
return 5;
case 'R':
return 6;
default:
return 0;
}
}
int main()
{
freopen("in.txt","r",stdin);
string str;
int i,j,len;
while(cin >> str)
{
len = str.size();
for(i = 0;i < len;)
{
j = Num(str[i]);
++i;
if(j != 0)
{
while(i < len && j == Num(str[i]))
++i;
cout << j;
}
}
cout << endl;
}
return 0;
}