字符串压缩A-Z

题目要求: 
1.连续大写字母缩写,连续字母长度n>=4。 
(如:AAABCDEFWW应该转换为AAA-FWW) 
2.除了大写字母以外其他的其他字符都忽略。 
(输入:2 
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;
}

  

 

posted @ 2018-09-10 14:52  道微真理  阅读(118)  评论(0)    收藏  举报