您的位置:首页 > 其它

普及练习场 交叉模拟 字符串的展开

2017-12-13 01:24 375 查看
题目链接

题意理解

这题很显然,就直接模拟就好了。我觉得吧,我对Java的API还不够熟悉,如果是”-a-“.split(“-“),返回结果居然是一个含有两个元素的String数组。我建议自己可以用cpp重写一下。。

代码

import java.util.Scanner;

public class Main {

public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int p1 = scanner.nextInt();
int p2 = scanner.nextInt();
int p3 = scanner.nextInt();
String input = scanner.next();
scanner.close();
String[] strings = input.split("-");
for(int i = 0; i < strings.length - 1; i++) {
if("".equals(strings[i])) {
System.out.print("-");
continue;
}
if("".equals(strings[i+1])) {
System.out.print(strings[i] + "-");
continue;
}
System.out.print(strings[i]);
char firstEnd = strings[i].charAt(strings[i].length() - 1);
char secondFirst = strings[i + 1].charAt(0);
if(isSameType(firstEnd, secondFirst) && firstEnd < secondFirst) {
System.out.print(output(p1, p2, p3, firstEnd, secondFirst));
} else {
System.out.print("-");
}
}
System.out.print(strings[strings.length - 1]);
if(input.endsWith("-")) {
System.out.print("-");
}
}

private static boolean isDigit(char c) {
return '0' <= c && c <= '9';
}

private static boolean isChar(char c) {
return 'a' <= c && c <= 'z';
}

private static boolean isSameType(char a, char b) {
return (isChar(a) && isChar(b)) || (isDigit(a) && isDigit(b));
}
// p1 = 1, 小写;p1 = 2,大写;p1 = 3,*
// p2 是填充次数
// p3 = 1,原来顺序;p3 = 2,逆序
private static String output(int p1, int p2, int p3, char left, char right) {
StringBuilder sb = new StringBuilder();
for(int i = left + 1; i < right; i++) {
for(int j = 0; j < p2; j++) {
sb.append((char)(i));
}
}
if(p3 == 2) {
sb = sb.reverse();
}
if(p1 == 1) {
return sb.toString();
} else if(p1 == 2) {
return sb.toString().toUpperCase();
} else if(p1 == 3) {
int len = sb.length();
sb = new StringBuilder();
for(int i = 0; i < len; i++) {
sb.append("*");
}
return sb.toString();
}
return "";
}
}


欢迎加入“不会算法一群菜鸟”,群号是⑥⑥①⑨②2025,这是我设置的一道很低的门槛用来阻止广告的。入群的验证暗号是:我爱编译原理
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: