题目要求:
1.连续大写字母缩写,连续字母长度n>=4。
(如:AAABCDEFWW应该转换为AAA-FWW)
2.除了大写字母以外其他的其他字符都忽略。
(输入:3
AAABCDEFWW
AABCDEWWABCD
输出:AAA-FWW
AA-EWWA-D)
我觉得应该注意的一点是:对换行符的操作
代码如下:
#include<iostream>
#include<string>
using namespace std;
int main()
{
string a;
char b;
int i,n,k;//i,k是循环时用的变量,无实际意义。n记录连续字母个数。
while(getline(cin,a))//按行输入,但是忽略了换行符
{
for(i=0;i<a.length();++i)
{
if(a[i]<'A'||a[i]>'Z')
{getline(cin,a);break;}//如果存在非大写字母,则读取下一行,并跳出此循环。
}
for(i=0;i<a.length();++i)
{
if(a[i]>='A'&&a[i]<='Z')
{
if(a[i+1]==a[i]+1)
{++n;continue;}//字符连续时,n自增,先不输出连续的字符,继续提取字符。
else
{
if(n>=3)//若连续字母数量大于等于4
{cout<<a[i-n]<<'-'<<a[i];//将连续字符按规定输出
n=0;//输出后,清空标记n
}
else
{
for(k=n;k>=0;--k)
{
cout<<a[i-k];//有连续但是不够四个的依次输出
n=0;
}
}
}
}
}
cout<<endl;
}
return 0;
}
该题目规定时间大约是半小时左右,题目难度偏低。