用阿拉伯数字转换值
本文关键字:转换 阿拉伯数字 | 更新日期: 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。