用阿拉伯数字转换值

本文关键字:转换 阿拉伯数字 | 更新日期: 2023-09-27 18:28:46

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

这一章教的是循环,但我发现自己在这个问题上真的迷失了方向。我完成了代码,但我觉得它很糟糕。。。

我的问题是:有没有更好的方法来缩短这个代码?我只想使用c关键字case,还有其他方法吗?

编辑:阿拉伯语,你可以输入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);
    }
}

}

用阿拉伯数字转换值

使用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]);
  }

我相信有人会发布一个1行使用LINQ,但这是香草版本。

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

   String decode "--------------------------------01234567890------2223334445556667778889999---------------------------------"; //256 char string
  numout = decode.substring((int) Char.GetNumericValue(userinput),1);

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