C#习题二/学习
题目2:对任意一个字符串进行加1运算,逢10到A,逢Z到0进1, 例:9+1=A;19+1=1A,1A+1=1B,1Z+1=20
反思:未能一次性做出,出现了输入1位字符、输入“ZZZ”数组越界的问题,后续增增删删将原本清晰的代码结构打乱,虽然最终解决,但是程序也臃肿凌乱了。造成这种结果的原因是:我对于程序的考虑不周密,对特殊情况不敏感,没有在头脑中设计出严密程序就开始敲代码,今后要切记,写代码只是将解决方案用计算机语言翻译出来的过程,真正要花功夫的是在敲代码之前对程序的构建!
涉及到的语法知识:
1、 将字符串string转化为字符数组的方法:
a) 变量.ToCharArray(); 返回值为字符数组即char[] cStr = str.ToCharArray();
2、 改变string的方法:
a) str = new string(cStr); 将 System.String 类的新实例初始化为由 Unicode 字符数组指示的值。
b) Replace(s1,s2):对字串中的s1用s2进行替换。
1 static void PrintTowSolution() 2 { 3 string str = Console.ReadLine(); 4 int last = str.Length - 1; 5 char end = str[last]; 6 char[] cStr = str.ToCharArray(); 7 bool flag = true, over=false; 8 if (last == 0) 9 { 10 if (end =='Z') 11 { 12 string a = "10"; 13 cStr = a.ToCharArray(); 14 } 15 else if(end=='9') 16 { 17 cStr[0] = 'A'; 18 } 19 else 20 { 21 cStr[0]++; 22 } 23 } 24 while (flag && last!=0) 25 { 26 flag = false; 27 if (end == '9') //如果最后一个字符是9 逢9变A 28 { 29 cStr[last] = 'A'; 30 } 31 else if (end == 'Z') //如果最后一个字符是Z 逢Z变0进1,分两种情况讨论 32 { 33 34 cStr[last] = '0'; //变0 35 if (last == 1 && cStr[last - 1] == 'Z') 36 { 37 cStr[last-1] = '0'; 38 over = true; 39 break; 40 } 41 if (cStr[last-1]=='Z') //如果前一位是Z的话 ,前一位也要变0进1,则启动下次循环,再作处理 42 { 43 flag = true; 44 45 } 46 else if(cStr[last - 1] == '9')//如果前一位是9的话则变A 47 { 48 cStr[last - 1] = 'A'; 49 } 50 else //如果前一位不是Z在进1 51 { 52 cStr[last - 1]++; 53 } 54 } 55 else 56 { 57 cStr[last]++; 58 } 59 last--; 60 end = str[last]; 61 } 62 if(over==false) 63 { 64 str = new string(cStr); 65 Console.WriteLine(str); 66 } 67 else 68 { 69 str = new string(cStr); 70 Console.WriteLine("1"+str); 71 } 72 } 73 }