使用阿拉伯数字转换值

时间:2013-08-23 01:02:43

标签: c#

问题是“编写一个程序,接受一个可能包含一个或多个字母字符的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);

    }
}

}

2 个答案:

答案 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。