sdut 第三届ACM/ICPC程序设计知识竞赛网络赛 字符串拓展

字符串扩展

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

提示

 本题思路:
先输入一串字符串,判断'-'两端的字符是否符合 [a-z] [A-Z] [0-9] 范围内,如果符合则删掉‘-’ ,并按照两端字符的ascii码输入两字符
中间的字符,不符合条件直接输出。
#include <stdio.h>
#include <string.h>
char str[30000];
int main()
{
    int num,i;
    scanf("%d",&num);
    scanf("%*c");
    for(i = 1;i <= num;i++)
    {

        int len,j,m1 = 0,m2 = 0,m;
        scanf("%s",str);
        len = strlen(str);

        for(j = 0;j < len;j++)
         {
              if(j == 0 || j == len-1 )
              {
                  printf("%c",str[j]);
              }else
               {
                    if(str[j] == '-'&&str[j-1] >= '0'&&str[j+1] <='9'&&str[j+1] >= str[j-1])
                {
                    m1 = str[j-1] + 1;
                    m2 = str[j+1] - 1;   //判断字符ascii
                    for(m = m1;m <= m2;m++)
                        printf("%c",m);
                        m1 = 0;
                                m2 = 0;
                }else if(str[j-1] >= 'A'&&str[j]=='-'&&str[j+1] <= 'Z'&&str[j+1] >= str[j-1])
                {
                     m1 = str[j-1] + 1;
                    m2 = str[j+1] - 1;
                    for(m = m1;m <= m2;m++)
                        printf("%c",m);
                        m1 = 0;
                        m2 = 0;
                }else if(str[j-1] >= 'a'&&str[j]=='-'&&str[j+1] <= 'z'&&str[j+1] >= str[j-1])
                {
                     m1 = str[j-1] + 1;
                    m2 = str[j+1] - 1;
                    for(m = m1;m <= m2;m++)
                        printf("%c",m);
                        m1 = 0;
                        m2 = 0;
                }else
                {
                   printf("%c",str[j]);
                }
               }
    }
    printf("\n");
    }
    return 0;
}


/*

#include<stdio.h>
#include<string.h>
int main()
{
int  n;
scanf("%d",&n);
char st[1001];
int k;
int i;
  int j;
int t;
scanf("%*c");

while(n--)

{
  scanf("%s",st);
  k=strlen(st);
  for(i=0;i<k;i++)
  {
      if(i==0||i==k-1)printf("%c",st[i]);

      else if(st[i]=='-'&&(st[i-1]>='0'&&st[i+1]<='9'||st[i-1]>='a'&&st[i+1]<='z'||st[i-1]>='A'&&st[i+1]<='Z')&&st[i-1]<=st[i+1])

      {
         t=st[i+1]-st[i-1];
         for(j=0;j<t-1;j++)
         {
             st[i-1]+=1;
            printf("%c",st[i-1]);
         }

      }

      else printf("%c",st[i]);

  }
  printf("\n");

}
return 0;
}
*/






  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SDUT山东理工大学(Shandong University of Technology)的缩写,这里我假设你是在问关于 Python 字符串的问题。 Python 中的字符串是一种不可变的序列类型,用于表示 Unicode 字符序列。Python 字符串可以用单引号、双引号或三引号括起来,三引号可以用于表示多行字符串。例如: ```python s1 = 'Hello, world!' s2 = "Hello, world!" s3 = '''Hello, world!''' ``` 如果你需要在字符串中使用单引号或双引号,可以使用另一种引号来括起来字符串,例如: ```python s4 = "I'm a student." s5 = 'He said, "Hello, world!"' ``` Python 提供了一些内置的字符串方法,例如: - `str.lower()`:返回字符串的小写形式。 - `str.upper()`:返回字符串的大写形式。 - `str.strip([chars])`:移除字符串开头或结尾的指定字符,默认移除空格符。 - `str.split([sep[, maxsplit]])`:使用指定的分隔符将字符串分割为子字符串。 - `str.join(iterable)`:使用字符串将可迭代对象中的元素连接起来。 - `str.replace(old, new[, count])`:返回将字符串中指定子字符串替换为新字符串后的副本。 例如: ```python s = ' Hello, world! ' s = s.strip() # 移除开头和结尾的空格符 print(s.lower()) # 输出:hello, world! print(s.upper()) # 输出:HELLO, WORLD! print(s.split(',')) # 输出:['Hello', ' world!'] print('-'.join(s.split(','))) # 输出:Hello- world! print(s.replace('world', 'Python')) # 输出:Hello, Python! ``` 希望这些信息对你有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值