洛谷---P1098 字符串的展开(java)

这道题需要考虑的情况也太多了吧()

尤其是 开头、结尾为‘-’,还会出现连续的“- -”,这种情况在刚开始的时候是没有考虑到的,还有就是对于数字与字母的ASCII码应用非常不熟练,如何进行相互的转换需要去百度搜索。

洛谷---P1098 字符串的展开(java)

1、将 字符转化为 他的十进制的int 值
这个还比较简单,直接 ‘a’-‘0’+48(‘a’-‘0’+‘0’)就可以了
洛谷---P1098 字符串的展开(java)
2、将十进制的数 转换为字符
洛谷---P1098 字符串的展开(java)

代码中字符差值部分用起来时 并没有转换为 ASCII的十进制数,因为只需要他们的差值

package _5_19;

import java.util.Scanner;

public class _1098 {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int p1 = sc.nextInt();
		int p2 = sc.nextInt();
		int p3 = sc.nextInt();
		String s = sc.next();
		String[] c = s.split("-");
		for(int i=0;i<c.length;i++) {
			System.out.println(c[i]);
		}
		
		String t = "";
		for(int i=0;i<c.length-1;i++) {
			if(c[i].equals("")) {
				t = t+"-";
			}else if((!c[i].equals("0")&&c[i+1].equals(""))) {
				t= t+c[i]+"-";
			}else {
				char c1[] = c[i].toCharArray();
				char c2[] = c[i+1].toCharArray();
				if(((c1[c[i].length()-1]-'0')>=0)&&((c1[c[i].length()-1]-'0')<=9)&&(c2[0]-'0'+48>=65)) {
					t = t+c[i]+"-";
				}else {
					if((c2[0]-'0')-(c1[c[i].length()-1]-'0')>=1) {
						t = t+c[i];
						if(p1==1&&p3==1) {
							for(int j=(c1[c[i].length()-1]-'0')+1;j<c2[0]-'0';j++) {
								int k=0;
								while(k<p2) {
									t= t+((char)(j+48));
									k++;
								}
							}
						}else if(p1==1&&p3==2) {
							for(int j=c2[0]-'0'-1;j>=(c1[c[i].length()-1]-'0')+1;j--) {
								int k=0;
								while(k<p2) {
									t= t+((char)(j+48));
									k++;
								}
							}
						}else if(p1==2&&p3==1) {
							for(int j=(c1[c[i].length()-1]-'0')+1;j<c2[0]-'0';j++) {
								int k=0;
								while(k<p2) {
									t= t+(String.valueOf((char)(j+48)).toUpperCase());
									k++;
								}
							}
						}else if(p1==2&&p3==2) {
							for(int j=c2[0]-'0'-1;j>=(c1[c[i].length()-1]-'0')+1;j--) {
								int k=0;
								while(k<p2) {
									t= t+(String.valueOf((char)(j+48)).toUpperCase());
									k++;
								}
							}
						}else {
							for(int j=(c1[c[i].length()-1]-'0')+1;j<c2[0]-'0';j++) {
								int k=0;
								while(k<p2) {
									t= t+("*");
									k++;
								}
							}
						}
					}else {
						t = t+c[i]+"-";
					}
				}
			}
		}
		t = t+c[c.length-1];
		if(s.endsWith("-")) {
				t= t+"-";
			System.out.println(t);
		}else {
		System.out.println(t);
		}
	}
}

最后一种情况时 就是最后会有“-“,要另外进行判断,因为刚开始拆分时并没有保存