1

问题指出“编写一个程序,接受一个可能包含一个或多个字母字符的 10 位电话号码。使用数字显示相应的号码......等”ABC:2 到 WXYZ:9

这一章讲的是循环,但我发现自己真的迷失在这个问题上。我完成了代码,但我认为它很糟糕......

我的问题:有没有更好的方法来缩短这段代码?而且我只想使用 c# 关键字大小写,还有其他方法吗?

编辑:阿拉伯语,你可以输入 1800WALLTO ,它会给你 1800925586

另外,我不是要一个不起作用的代码,这正是我想要的,并要求它做。我只是要求任何关于如何使它变得更好的建议或意见。我真的很想知道一种方法来做到这一点,而不用 switch 和 case break 等......

 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);

    }
}

}

4

2 回答 2

1

使用System.Collections.Generic.Dictionary ,其中字典键是字符 AZ 和 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,但这是香草版本。

于 2013-08-23T01:19:09.027 回答
0

使用字符串查找会缩短代码:--

   String decode "--------------------------------01234567890------2223334445556667778889999---------------------------------"; //256 char string

  numout = decode.substring((int) Char.GetNumericValue(userinput),1);

但这比使用“case”语句的效率要低得多。更少的代码并不意味着更少的cpu。

于 2013-08-23T01:25:28.590 回答