2015-09-06 94 views
0

我正在尝试编写一个简单的程序,它将字母映射到等效数字,就像您在手机键盘上获得的一样。例如aghk = 2445.我似乎无法让程序正常工作。我到目前为止已经在下面。我正在使用MVC(模型视图控制器)模式。我得到的问题是,如果我输入一个字母,它会给出正确的数字,但只要输入多个数字,就不会出现输出。任何帮助,你可以给我如何解决这个将不胜感激。将字母映射到数字C#

namespace MapKeyPad 
{ 
    class Model 
    { 
     public String ReadKey(String usrInput) 
     { 
      usrInput = usrInput.ToLower(); 
      int Len = usrInput.Length; 
      int i = 0; 

      if (usrInput == "a" || usrInput == "b" || usrInput == "c") 
      { 
       Console.Write("1"); 
      } 

      else if (usrInput == "d" || usrInput == "e" || usrInput == "f") 
      { 
       Console.Write("2"); 
      } 

      else if (usrInput == "g" || usrInput == "h" || usrInput == "i") 
      { 
       Console.Write("3"); 
      } 

      return ""; 
     } 
    } 
} 
+2

您必须遍历字符串并重复每个字母的过程。 – cubrr

+0

或只是使用一个简单的'.Select' – Carsten

+0

btw:我根本看不到很多MVC模式...似乎是在一个地方的所有东西 – Carsten

回答

4

我得到的问题是,如果我输入一个字母,它会给 正确的数字,但是当我输入多个数字都显示没有 输出。

那么这是因为你的比较逻辑。看到这里:

 if (usrInput == "a" || usrInput == "b" || usrInput == "c") 

你是比较整个字符串对单个字母说“a”。 你需要的东西是这样的:

foreach (char c in usrInput) 
{ 
     if (c == 'a' || c == 'b' || c == 'c') 
     { 
     Console.Write("1"); 
     } // etc. do other comparisons similarly 
     ... 
} 
1

尝试这样:

var usrInput = usrInput.ToLower(); 
    foreach(var letter in usrInput) 
    { 
     if (letter == 'a' || letter == 'b' || letter == 'c') 
     { 
      Console.Write("1"); 
     } 

     else if (letter == 'd' || letter == 'e' || letter == 'f') 
     { 
      Console.Write("2"); 
     } 

     else if (letter == 'g' || letter == 'h' || letter == 'i') 
     { 
      Console.Write("3"); 
     } 
    } 
0

@giorgi答案是很好的描述,但如果你想编写一个通用的代码,那么你可以考虑使用ASCII值每个字符被键入并减去96(a的ASCII值是97),这将给出az的所有小写字母的值。同样写大写字母的逻辑