问题是“编写一个程序,接受一个可能包含一个或多个字母字符的10位数电话号码。使用数字......等显示相应的号码” ABC:2到WXYZ:9
本章讲述循环,但我发现自己真的迷失了这个问题。我完成了代码,但我觉得很糟糕......
我的问题:是否有更好的方法来缩短此代码?我只想使用c#关键字大小写,还有另外一种方法吗?
编辑:阿拉伯语,如你可以输入1800WALLTO,它会给你1800925586
另外,我并不是要求代码不起作用,这完全符合我的要求并要求它做。我只想询问有关如何使其变得更好的任何建议或意见。我真的想知道一种方法,没有开关和断案等等......
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
int x = 0;
char userInput = ' ';
string inputString = "",
outputString = "";
Console.WriteLine("Enter the digits from the phone number");
do
{
userInput = Console.ReadKey(false).KeyChar;
inputString += userInput;
if (Char.IsLetter(userInput))
userInput = userInput.ToString().ToUpper().ToCharArray()[0];
switch (userInput)
{
case '1':
outputString += '1';
x++;
break;
case '2':
case 'A':
case 'B':
case 'C':
outputString += '2';
x++;
break;
case '3':
case 'D':
case 'E':
case 'F':
outputString += '3';
x++;
break;
case '4':
case 'G':
case 'H':
case 'I':
outputString += '4';
x++;
break;
case '5':
case 'J':
case 'K':
case 'L':
outputString += '5';
x++;
break;
case '6':
case 'M':
case 'N':
case 'O':
outputString += '6';
x++;
break;
case '7':
case 'P':
case 'Q':
case 'R':
case 'S':
outputString += '7';
x++;
break;
case '8':
case 'T':
case 'U':
case 'V':
outputString += '8';
x++;
break;
case '9':
case 'W':
case 'X':
case 'Y':
case 'Z':
outputString += '9';
x++;
break;
case '0':
outputString += '0';
x++;
break;
default:
Console.WriteLine("You entered an incorrect value-Try again");
x--;
break;
}
}
while (x < 10);
Console.WriteLine("\nYou entered {0}", inputString);
Console.WriteLine("Your number is {0}", outputString);
}
}
}
答案 0 :(得分:1)
使用System.Collections.Generic.Dictionary,其中字典键是字符A-Z和0-9,值是相应的数字:
var lookup = Dictionary<char, int> {
{'A',2},
{'B',2},
// etc...
{'Z', 9},
{'1':1},
{'2':2}
// etc... include the numerals so you don't have to converts some things to char not the rest...
};
// to lookup a character:
char item = 'A';
int number = lookup['A'];
要解码电话号码,只需将其拆分为一个字母数组,然后逐个查找
List<int> digits = new List<int>();
foreach (char c in inputString)
{
digits.Add(lookup[c]);
}
我确定有人会使用LINQ发布1-liner,但这是vanilla版本。
答案 1 :(得分:0)
使用字符串查找会缩短代码: -
String decode "--------------------------------01234567890------2223334445556667778889999---------------------------------"; //256 char string
numout = decode.substring((int) Char.GetNumericValue(userinput),1);
但它比使用“案例”声明的效率要低得多。更少的代码并不意味着更少的CPU。