字符串扩展

13 篇文章 0 订阅

字符串扩展

Time Limit: 1000MS Memory limit: 65536K

题目描述

Tom有些时候为了记录的方便,常常将一些连续的字符用扩展符'-'简单表示。比如abcdefg可以简写为a-g,即用起始的字符和终止字符中间加上一个扩展符'-'来表示这个字符串。但是为了处理的方便,Tom又必须将这些我们简单记法扩展成原来的字符串。很明显要是人工来做的话必定很麻烦,Tom知道计算机可以帮助他完成这个任务,但是他却不会编程,这的确让他很上火。他知道今天是山东理工大学第三届ACM校赛的日子,届时来自全校的编程爱好者都会来参加比赛,他很兴奋,因为这个困惑他良久的问题终于要被解决了。给你一个含有扩展符'-'的字符串,你的任务就是将他还原成原来的字符串。要求是只处理[a-z][A-Z][0-9]范围内的字符扩展,即只有当扩展符前后的字符同时是小写字母、大写字母或数字时并且扩展符前面的字符不大于后面的字符才进行扩展,其它情况不进行扩展,原样输出。例如:a-RD-e0-b4-B等字符串都不进行扩展。

输入

第一行是一个正整数T,表示共有T组测试数据(T < 100)下面的T行,每一行包括一个长度不大于1000的待扩展字符串.

输出

每组测试数据输出一行扩展后的字符串。

示例输入

3
ADEa-g-m02
acm-0-5-a-ac-cm-m-A-AC-CM-M
Welcometothe3rdACM/ICPCCampusProgrammingContestofSDUT-1-3-A-z-a-Z

示例输出

ADEabcdefghijklm02
acm-012345-aaccmm-AACCMM
Welcometothe3rdACM/ICPCCampusProgrammingContestofSDUT-123-A-z-a-Z

提示

 
扩展符不是下划线,在本题目中,可以边输出边判断,当遇到扩展符的时候,判断其前后是否属于同一类型的字符,并且前面的字符ASCII码小于或等于后面的,条件满足,则扩展输出,否则,原样输出。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main()
{
    int n,i,j,k,l;
    char str[1009];
    char c;
    scanf("%d%*c",&n);
    while(n--)
    {
        scanf("%s",&str);
        l = strlen(str);
        for(i = 0;i<l;i++)
        {
            if(str[i]!='-')
                printf("%c",str[i]);
            else
            {
                if(str[i-1] >= 'A' && str[i-1] <= 'Z' && str[i+1] >= 'A' && str[i+1] <= 'Z' && str[i-1] <= str[i+1])
                {
                    if(str[i-1] < str[i+1])
                    {
                        c = str[i-1];
                        while(c!=str[i+1])
                        {
                            c = c + 1;
                            printf("%c",c);
                        }
                        i = i + 1;
                    }
                    else if(str[i-1] == str[i+1])
                    {
                        printf("%c",str[i+1]);
                        i = i+1;
                    }
                }
                else if(str[i-1] >= 'a' && str[i-1] <= 'z' && str[i+1] >= 'a' && str[i+1] <= 'z' && str[i-1] <= str[i+1])
                {
                    if(str[i-1] < str[i+1])
                    {
                        c = str[i-1];
                        while(c!=str[i+1])
                        {
                            c = c + 1;
                            printf("%c",c);
                        }
                        i = i + 1;
                    }
                    else if(str[i-1] == str[i+1])
                    {
                        printf("%c",str[i+1]);
                        i = i+1;
                    }
                }
                else if(str[i-1] >= '0' && str[i-1] <= '9' && str[i+1] >= '0' && str[i+1] <= '9' && str[i-1] <= str[i+1])
                {
                    if(str[i-1] < str[i+1])
                    {
                        c = str[i-1];
                        while(c!=str[i+1])
                        {
                            c = c + 1;
                            printf("%c",c);
                        }
                        i = i + 1;
                    }
                    else if(str[i-1] == str[i+1])
                    {
                        printf("%c",str[i+1]);
                        i = i+1;
                    }
                }
                else
                {
                    printf("%c",str[i]);
                }
            }
        }
        printf("\n");
    }
    return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值