【蓝桥杯】字符串的操作(Java实现)


/* 程序问题注释开始

  • 程序的版权和版本声明部分

  • Copyright © 2020,湖南工程职业技术学院信息工程学院学生

  • 文件名称: 蓝桥杯赛题

  • 作 者: 李 斌

  • 完成日期: 2020 年 04 月 23日

  • 对任务及求解方法的描述部分

  • 问题描述
      给出一个字符串S,然后给出q条指令,分别有4种:

  1. Append str
      表示在S的最后追加一个字符串str。
      例:
      原字符串:ABCDE
      执行 Append FGHIJ 后
      字符串变为:ABCDEFGHIJ
  2. Insert x str
      表示在位置x处插入一个字符串str。(输入保证0<x<=当前字符串长度)
      例:
      原字符串:ABCGHIJ
      执行 Insert 4 DEF 后
      字符串变为:ABCDEFGHIJ
  3. Swap a b c d
      表示交换从第a位到第b位的字符串与从第c位到第d位的字符串。(输入保证0<a<b<c<d<=当前字符串长度)
      例:
      原字符串:ABGHIFCDEJ
      执行 Swap 3 5 7 9后
      字符串变为:ABCDEFGHIJ
  4. Reverse a b
      表示将从第a位到第b位的字符串反转。(输入保证0<a<b<=当前字符串长度)
      例:
      原字符串:ABGFEDCHIJ
      执行 Reverse 3 7 后
      字符串变为:ABCDEFGHIJ
      最后输出按顺序执行完指令后的字符串。
  • 输入格式
      输入第一行包含字符串S,第二行包含一个整数q,接下来q行分别为q个指令。

  • 输出格式
      输出为1行,为按顺序执行完输入指令后的字符串。

  • 样例输入
      My
      5
      Append Hello
      Insert 3 dlroW
      Reverse 3 7
      Swap 3 7 8 12
      Swap 1 2 3 7

  • 样例输出
      HelloMyWorld

  • 样例说明
      原字符串:My
      执行 Append Hello 后:MyHello
      执行 Insert 3 dlroW 后:MydlroWHello
      执行 Reverse 3 7 后:MyWorldHello
      执行 Swap 3 7 8 12 后:MyHelloWorld
      执行 Swap 1 2 3 7 后:HelloMyWorld

  • 数据规模和约定
      对于30%的数据,q=1;
      对于70%的数据,如有Swap指令,Swap指令中b-a=d-c;
      对于100%的数据,最终字符串长度不大于40000,1<=q<=150

  • 程序问题注释结束

*/


import java.util.Scanner;
public class Main {
    
    

	public static void main(String[] args) {
    
    
		// TODO 自动生成的方法存根
		Scanner in=new Scanner(System.in);
		//用户请输入原字符串
		String str=in.nextLine();
		//用户请输入操作字符串次数
		int n=Integer.parseInt(in.nextLine());
		//存储每次操作字符串
		String[] arr=new String[n];
		//用户请输入操作字符串
		for(int i=0;i<n;i++)
		{
    
    
			//存储操作串
			arr[i]=in.nextLine();
		}
		//循环操作次数
		for(int i=0;i<n;i++)
		{
    
    
			//寻找第一个空格下标
			int index=arr[i].indexOf(" ");
			//存储操作项
			String firststr=arr[i].substring(0,index);
			//判断操作项是否为Append
			if(firststr.equals("Append"))
			{
    
    
				//存储追加字符串
				String substring=arr[i].substring(index+1);
				//调用追加方法,结果返回给str
				str=Append(str,substring);
			}
			//判断操作项是否为Insert
			if(firststr.equals("Insert"))
			{
    
    
				//寻找最后一个空格下标
				int lastindex=arr[i].lastIndexOf(" ");
				//寻找并存储待插入下标
				String str0=arr[i].substring(index+1,lastindex);
				int num1=Integer.parseInt(str0);
				//存储插入字符串
				String substring=arr[i].substring(lastindex+1);
				//调用插入方法,结果返回给str
				str=Insert(str,num1,substring);
			}
			//判断操作项是否为Reverse
			if(firststr.equals("Reverse"))
			{
    
    
				//寻找最后一个空格下标
				int lastindex=arr[i].lastIndexOf(" ");
				//寻找并存储待翻转字符串首下标
				String str0=arr[i].substring(index+1,lastindex);
				int num1=Integer.parseInt(str0);
				//寻找并存储待翻转字符串尾下标
				str0=arr[i].substring(lastindex+1);
				int num2=Integer.parseInt(str0);
				//调用反转方法,结果返回给str
				str=Reverse(str,num1,num2);
			}
			//判断操作项是否为Swap
			if(firststr.equals("Swap"))
			{
    
    
				//字符串拆解为字符串数组
				String[] num=arr[i].split(" ");
				//存储第一个交换字符串首下标
				int num1=Integer.parseInt(num[1]);
				//存储第一个交换字符串尾下标
				int num2=Integer.parseInt(num[2]);
				//存储第二个交换字符串首下标
				int num3=Integer.parseInt(num[3]);
				//存储第二个交换字符串尾下标
				int num4=Integer.parseInt(num[4]);
				//调用交换方法,结果返回给str
				str=Swap(str,num1,num2,num3,num4);
			}
		}
		//输出操作完成的字符串
		System.out.println(str);
	}
	
	//追加方法
	public static String Append(String str,String substring)
	{
    
    
		//追加连接操作
		str=str+substring;
		//返回追加后字符串
		return str;
	}
	
	//插入方法
	public static String Insert(String str,int num1,String substring)
	{
    
    
		//插入前一部分的字符串
		String first=str.substring(0,num1-1);
		//插入后一部分的字符串
		String last=str.substring(num1-1);
		//插入连接操作
		str=first+substring+last;
		//返回插入后字符串
		return str;
	}
	
	//反转方法
	public static String Reverse(String str,int num1,int num2)
	{
    
    
		//反转前一部分的字符串
		String first=str.substring(0,num1-1);
		//反转后一部分的字符串
		String last=str.substring(num2);
		//待反转字符串
		String substring =str.substring(num1-1, num2);
		//反转的字符串
		substring=new StringBuffer(substring).reverse().toString();
		//反转连接操作
		str=first+substring+last;
		//返回反转后字符串
		return str;
	}

	//交换方法
	public static String Swap(String str,int num1,int num2,int num3,int num4)
	{
    
    
		//交换前一部分的字符串
		String first=str.substring(0,num1-1);
		//交换后一部分的字符串
		String last=str.substring(num4);
		//交换中间一部分的字符串
		String center=str.substring(num2,num3-1);
		//交换第一部分字符串
		String substring1 =str.substring(num1-1, num2);
		//交换第二部分字符串
		String substring2 =str.substring(num3-1, num4);
		//交换连接操作
		str=first+substring2+center+substring1+last;
		//交换反转后字符串
		return str;
	}
}

运行结果:
运行结果

猜你喜欢

转载自blog.csdn.net/qq_46354133/article/details/105714971