G - 字符串扩展 (StringBuffer应用)

本文介绍了一个字符扩展还原问题的解决方案,该问题旨在将使用简写形式(如a-g表示abcdefg)的字符串转换回其原始形式。文章提供了一个Java程序实例,能够处理小写字母、大写字母及数字的扩展,并在特定条件下正确还原字符串。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Description

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

Input

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

Output

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

Sample

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

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


import java.util.Scanner;

class Test {
	StringBuffer sbf;
	public Test(StringBuffer sbf) {
		this.sbf=sbf;
	}

	public StringBuffer change(char begin,char ends,int x) {
			StringBuffer str = new StringBuffer();
			for(char i=(char)(begin+1); i<ends; i++) {
				str.append(i);
			}
			//创建新的sbf存储添加的字符串
			String s = str.toString();
			//转化为String,用于插入
			sbf.insert(x,s);
		return sbf;
	}
}

public class Main {
	
	public static void main(String[] args) {
		Scanner input = new Scanner(System.in);
		int t = input.nextInt();
		while(t--!=0) {
			StringBuffer sbf = new StringBuffer(input.next());
			Test test = new Test(sbf);
			for(int i=1;i<sbf.length()-1;i++) {
				if(sbf.charAt(i)=='-') {
					char begin = sbf.charAt(i-1);
					char ends = sbf.charAt(i+1);
					if(begin <= ends && ((begin >= 'a' && ends <= 'z') || (begin >= 'A' && ends <= 'Z')|| (begin >= '0' && ends <= '9'))) {
						sbf.deleteCharAt(i);
						//删除'-';
						test.change(sbf.charAt(i-1), sbf.charAt(i), i);
						//'-'被删除,ends前移,i为插入位置
					}
				}
			}
			System.out.println(sbf);
		}
		input.close();
	}
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值