2015-09-06 85 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的所有小寫字母的值。同樣寫大寫字母的邏輯