解题思路:
规则简述 数字和字母规则相同。 1, d-e => de; e-d =>e-d 如果右大于左一个,则去掉-号,否则不变。 2, p1=1,填充小写 p1=2,填充大写 p1=3,数字和字母都填充“*” 3, p2=k,填充k次 4, p3=1,顺序填写, p3=2,逆序填写
注意事项:
测试数据很刁钻。有连续两个"--",或者开头和结尾有'-'。
题目中并没有提示这些,但我仍然觉得它是一个关于java字符串方面的好题,同时对于程序鲁棒性也有一定的考验。
参考代码:
import java.util.Scanner; public class Main { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub Scanner sc=new Scanner(System.in); int p1=sc.nextInt(); int p2=sc.nextInt();//k int p3=sc.nextInt(); String str=sc.next(); for (int i = 0; i < str.length(); i++) { char item_=str.charAt(i);// '-' if (i==0 && item_=='-') {//意外情况 System.out.print(item_); continue; } if (i==str.length()-1 && item_=='-') {//意外情况 System.out.print(item_); continue; } if (item_=='-') { char item_left=str.charAt(i-1); //'-'左字符 char item_right=str.charAt(i+1); //'-'右字符 if (item_right==item_left+1) { continue; } if (item_right<=item_left || Character.isDigit(item_left)!=Character.isDigit(item_right) || Character.isUpperCase(item_left)!=Character.isUpperCase(item_right) || Character.isLowerCase(item_left)!=Character.isLowerCase(item_right)) { //当-前后类型不同时,也是原样输出。。。 System.out.print(item_); continue; } int n=item_right-item_left-1;//需要循环字符个数 if (p1==3) { for (int j = 0; j <n; j++) { for (int k = 0; k <p2; k++) { System.out.print('*'); } } }else if (p1==2 || p1==1) { char temp=item_left; String tempStr=""; for (int j = 0; j <n; j++) { temp++; for (int k = 0; k <p2; k++) { tempStr+=temp; } } if (p3==2) {//反序 tempStr=new StringBuffer(tempStr).reverse().toString(); } if (p1==2) { tempStr= tempStr.toString().toUpperCase(); }else if (p1==1) { tempStr= tempStr.toString().toLowerCase(); } System.out.print(tempStr); } }else { System.out.print(item_); } } } }
0.0分
1 人评分
C二级辅导-统计字符 (C语言代码)浏览:541 |
2^k进制数 (C++代码)使用递归方法浏览:722 |
C语言训练-排序问题<1> (C语言代码)浏览:601 |
C语言程序设计教程(第三版)课后习题6.6 (C语言代码)浏览:624 |
【计算直线的交点数】 (C语言代码)浏览:1453 |
蛇行矩阵 (C语言代码)浏览:536 |
前10名 (C语言代码)浏览:727 |
简单的事情 (C语言代码)浏览:638 |
C语言程序设计教程(第三版)课后习题7.2 (C语言代码)浏览:754 |
1202题解浏览:633 |