2012-01-14 65 views
1

我想用數字來改變字符,例如:a用1,b用2 ... z用26.因此字符串「hello」將是這樣的:82491513621.第一個問題是:如何做到這一點最簡單的方法,第二:如何用SWITCH語句來做到這一點。我試過了,但是休息之後;它停止。謝謝。如何用C#中的數字來更改字符串中的所有字符?

+0

你可以發佈你的當前代碼嗎? – 2012-01-14 12:36:50

+1

你能顯示你的代碼嗎?在家庭作業中發現錯誤並沒有問題,但是不能提供代碼。 – dasblinkenlight 2012-01-14 12:37:11

+0

你怎麼會變成82491513621?不應該是'8 5 12 12 15'嗎? – Default 2012-01-14 12:57:37

回答

2

你需要一個循環,無論你做。一個簡單的開關是不夠的。

string input = "hello"; 
StringBuilder output = new StringBuilder(); 
foreach(char c in input) 
{ 
    output.Append((c - 'a' + 1)); 
} 

Console.WriteLine(output); 

一些解釋:因爲所有的字母都以字母順序關聯的數字ASCII代碼,就意味着,從代表的信函有任何字符,我們可以減去「A」加1得到字母表的數字等級。

如果使用switch語句是一個絕對的要求,你需要寫一個獨立的情況下,一個字符的每個可能值:

string input = "hello"; 
StringBuilder output = new StringBuilder(); 
foreach(char c in input) 
{ 
    switch(c) 
    { 
     case 'a': output.Append("1"); break; 
     case 'b': output.Append("2"); break; 
     // etc. 
     case 'z': output.Append("26"); break; 
    }    
} 

Console.WriteLine(output); 
+0

在append方法或Console.WriteLine()中不需要.ToString(),因爲兩者都有可以分別處理整數和StringBuilder的重載。 – ljs 2012-01-14 12:55:16

+0

@kronoz:謝謝,你說得對。我編輯了我的帖子以刪除ToString()調用。 – Tudor 2012-01-14 12:59:26

0

以下幾段代碼是基於ASCII表示的字母。

  • A由65
  • B由值66
  • ...等表示的值表示。

從字符數組:

char[] letters = { 'A', 'B', 'C', 'D' }; 
int[] numbers = new int[4]; 

for (int i = 0; i < 4; i++) 
{ 
    numbers[i] = Convert.ToByte(letters[i], CultureInfo.InvariantCulture) - 64; 
} 

備用方式:

string myString = "HELLO"; 
StringBuilder stringAsNumbers = new StringBuilder(); 

for (int i = 0; i < myString.Length; i++) 
{ 
    stringAsNumbers.Append(Convert.ToByte(myString[i], CultureInfo.InvariantCulture) - 64); 
} 

照顧區分大小寫的。上面的代碼僅適用於大寫字母,因爲65是'A'(而不是'a')的ASCII碼。

不要嘗試switch語句,它看起來很可怕。

編輯: 如果你真的想switch語句,那就是:

string myString = "AAB"; 
StringBuilder stringAsNumbers = new StringBuilder(); 

for (int i = 0; i < myString.Length; i++) 
{ 
    switch (myString[i]) 
    { 
     case 'A': 
     case 'a': 
      stringAsNumbers.Append("1"); 
      break; 
     case 'B': 
     case 'b': 
      stringAsNumbers.Append("2"); 
      break; 
     ... 
    } 
} 

編輯: 得到最終stringStringBuilder,使用stringAsNumbers.ToString();

+1

雖然它是作業,所以'switch'可能是一個要求。 – 2012-01-14 12:38:58

+0

是的,作業是關於開關,它是必需的,但也想要最簡單的方法。 – samuraisxmali 2012-01-14 12:49:40

+0

好!看到更新的答案。 – ken2k 2012-01-14 12:53:15

0

你可以這樣定義一個函數:

int transform(char ch) 
{ 
} 

這可以使用字典來實現:

Dictionary<char, int> map; 
map['a'] = 1; 
map['b'] = 2; 
... 
return map[ch]; 

或使用開關a你提到的:

switch(ch) 
{ 
    case 'a': return 1; 
    case 'b': return 2; 
    .... 
} 

現在函數已經準備好了,你可以遍歷你的字符串並調用每個字符的變換。