luogu1098:字符串的展开:NOIP2007提高组T2

题目连接:该题是luogu试炼场的2-2:T5


题目大意:
1 字符串中有一些“-”的符号,按照特定的要求展开;


解题思路:
1 超级繁琐的细节分析:锻炼你细心的时间到了!


上代码:

//luogu1098:字符串的展开
//超级繁琐的细节分析 
#include<cstdio>
#include<cstring>
char s[1010]; 
int main()
{
    int a,b,c;
    scanf("%d %d %d",&a,&b,&c); 
    scanf("%s",s+1); 
    int n=strlen(s+1);
    
    printf("%c",s[1]);
    
    for(int i=2;i<n;i++)
    {
        if(s[i]=='-'&&s[i+1]==s[i-1]+1) continue;//直接删除-号
        if(s[i]=='-'&&s[i+1]>s[i-1]&&(
        (s[i+1]>='0'&&s[i+1]<='9'&&s[i-1]>='0'&&s[i-1]<='9')||
        (s[i+1]>='a'&&s[i+1]<='z'&&s[i-1]>='a'&&s[i-1]<='z')||
        (s[i+1]>='A'&&s[i+1]<='Z'&&s[i-1]>='A'&&s[i-1]<='Z')))
        {
            char x=s[i-1],y=s[i+1];
            
            if(a==1)//要求小写 
            {
                if(x>='A'&&x<='Z'&&y>='A'&&y<='Z')
                {
                    x+='a'-'A'; y+='a'-'A';
                }
            }
            if(a==2)//要求大写 
            {
                if(x>='a'&&x<='z'&&y>='a'&&y<='z')
                {
                    x+='A'-'a'; y+='A'-'a';
                }
            }
            if(c==1)//正序 
            {
                for(int j=x+1;j<y;j++)//对应的字母 
                {
                    for(int t=1;t<=b;t++)//重复输出的数量
                    { 
                        if(a==3) printf("*");
                        else printf("%c",j);
                    } 
                }
            } 
            else if(c==2)//逆序 
            {
                for(int j=y-1;j>x;j--)//对应的字母 
                {
                    for(int t=1;t<=b;t++)//重复输出的数量
                    { 
                        if(a==3) printf("*");
                        else printf("%c",j);
                    } 
                }
            }
        } 
        else printf("%c",s[i]);
    }
    
    printf("%c",s[n]);
    return 0;
}

猜你喜欢

转载自blog.csdn.net/liusu201601/article/details/88387245