网易笔试编程题之连续字符串缩写(详解+代码)!!!

题目要求:
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;
}

该题目规定时间大约是半小时左右,题目难度偏低。

猜你喜欢

转载自blog.csdn.net/the_king_of_coder/article/details/82534096