2013-11-27 92 views
0

我正在使用C#處理電話號碼轉換器代碼,努力將任何字母字符替換爲電話鍵上相應的數字。在此處的代碼中,變量結果已經有一個10個字符,這是一個數字和字母的組合。正如你在代碼中看到的,我試圖通過開關盒使用Replace方法,但它給了我錯誤的結果。任何想法?謝謝。 對不起,我忘記提及數組不允許在這個項目中使用,只是條件和重複.Ah,它是控制檯C#。替換方法不起作用,C#

for (int i = 0; i < result.Length; i++) 
     { 

      switch (buffer) 
      { 

       case "A": 
       case "B": 
       case "C": myNumber = result.Replace(buffer, "2"); 
        break; 
       case "D": 
       case "E": 
       case "F": myNumber = result.Replace(buffer, "3"); 
        break; 

       case "G": 
       case "H": 
       case "I": myNumber = result.Replace(buffer, "4"); 
        break; 



       case "J": 
       case "K": 
       case "L": myNumber = result.Replace(buffer, "5"); 
        break; 


       case "M": 
       case "N": 
       case "O": myNumber = result.Replace(buffer, "6"); 
        break; 

       case "P": 
       case "Q": 
       case "R": 
       case "S": myNumber = result.Replace(buffer, "7"); 
        break; 

       case "T": 
       case "U": 
       case "V": myNumber = result.Replace(buffer, "8"); 
        break; 


       case "W": 
       case "X": 
       case "Y": 
       case "Z": myNumber = result.Replace(buffer, "9"); 
        break; 

      } 


      Console.WriteLine("({0})-{1}-{2}", myNumber.Substring(0, 3), myNumber.Substring(3, 3), myNumber.Substring(6, 4)); 
+0

'buffer'從哪裏來?我覺得你在'switch'之前遺漏了一行代碼,它將一個值賦給'buffer'。 – rikitikitik

+2

什麼是'緩衝區'?它不應該是'result.Chars [i]'? –

+0

heck是從6到4的子串怎麼沒吹? –

回答

0

考慮以下重寫......

string result = "1800CALLME"; 
    string myNumber = string.Empty; 
    for (int i = 0; i < result.Length; i++) 
    { 
    string buffer = result[i].ToString(); 
    switch (buffer) 
    { 

     case "A": 
     case "B": 
     case "C": myNumber += "2"; 
      break; 
     case "D": 
     case "E": 
     case "F": myNumber += "3"; 
      break; 

     case "G": 
     case "H": 
     case "I": myNumber += "4"; 
      break; 

     case "J": 
     case "K": 
     case "L": myNumber += "5"; 
      break; 

     case "M": 
     case "N": 
     case "O": myNumber += "6"; 
      break; 

     case "P": 
     case "Q": 
     case "R": 
     case "S": myNumber += "7"; 
      break; 

     case "T": 
     case "U": 
     case "V": myNumber += "8"; 
      break; 


     case "W": 
     case "X": 
     case "Y": 
     case "Z": myNumber += "9"; 
      break; 

    } 


    Console.WriteLine("({0})-{1}-{2}", myNumber.Substring(0, 3), myNumber.Substring(3, 3), myNumber.Substring(6, 4)); 

祝您好運!

+0

我可以用結果[i]替換結果嗎?不允許在我的項目中使用數組。 – sunflower

+0

如果你喜歡...你可以做以下的事情... string buffer = result。子串(i,1); – gpmurthy

+0

哦,哇,它的工作!謝謝你非常感謝你:))))) – sunflower

1

String是不可變的。當你做

result.Replace(buffer, "9"); 

結果不會改變。

因此,您只使用上次迭代的替換,而不是代碼所做的所有替換組合。這就是你分配給你的代碼。取而代之的

myNumber = result.Replace(buffer, "9"); 

result = result.Replace(buffer, "9"); 

甚至,如果你想

myNumber = result = result.Replace(buffer, "9"); 
+0

是的,這假設「緩衝區」是目前正在評估的數字/字母。如果不是,那是你應該糾正的第一個錯誤。 – SJuan76

+0

仍然沒有給我正確的結果。它打印與替換它們的信件的電話號碼。 – sunflower

+0

謝謝你的幫助:) – sunflower

2

你分配Replace方法結果myNumber,但在一個循環迭代你正在以result作爲Replace p再次參與。它不能工作。

怎麼樣:

private static readonly Dictionary<string, string> PhoneReplacements = 
    new Dictionary<string, string>() { 
     { "A", "1" }, { "B", "1" }, { "C", "1" }, 
     { "D", "2" }, { "E", "2" }, { "F", "2" }, 
     { "G", "3" }, { "H", "3" }, { "I", "3" } 
     // (...) 
    }; 

private static string GetPhoneNumber(string number) 
{ 
    foreach(var r in PhoneReplacements) 
    { 
     number = number.Replace(r.Key, r.Value); 
    } 
    return number; 
} 
+0

看起來不錯,但這個項目不幸,我不允許使用數組或字典,只是條件和重複。 – sunflower

+0

感謝您的幫助:) – sunflower

0

在構建字符串時請記得使用StringBuilder,特別是在迭代中構建字符串時。

private static readonly Dictionary<Char, Byte> mappings = new Dictionary<Char, Byte>() { 
    { 'A', 2 }, { 'B', 2 }, { 'C', 2 }, 
    { 'D', 3 }, { 'E', 3 }, { 'F', 3 }, 
    { 'G', 4 }, { 'H', 4 }, { 'I', 4 }, 
    { 'J', 5 }, { 'K', 5 }, { 'L', 5 }, 
    { 'M', 6 }, { 'N', 6 }, { 'O', 6 }, 
    { 'P', 7 }, { 'Q', 7 }, { 'R', 7 }, { 'S', 7 }, 
    { 'T', 8 }, { 'U', 8 }, { 'V', 8 }, 
    { 'W', 9 }, { 'X', 9 }, { 'Y', 9 }, { 'Z', 9}, 
    { ' ', 0 } 
}; 

private static string StringToKeystrokes(string s) 
{ 
    StringBuilder sb = new StringBuilder(); 
    foreach (char c in s) 
    { 
     if (mappings.ContainsKey(c)) 
     { 
      sb.Append(mappings[c]); 
     } 
    } 
    return sb.ToString(); 
} 

使用代碼。

string s = "ABC DEF GHI JKL MNO PQRS TUV WXYZ"; 
Console.WriteLine(s); 
Console.WriteLine(StringToKeystrokes(s)); 
+0

感謝您的幫助:) – sunflower