2012-01-14 11 views
1

私は数字で文字を変更したいと思っています。たとえば、aと1、bと2 ... zと26です。文字列 "hello"は次のようになります:82491513621。最も簡単な方法で、2番目はSWITCHステートメントでこれを行う方法です。私はこれを試みたが、休憩した。それは止まる。ありがとう。C#で文字列内のすべての文字を数値で変更する方法は?

+0

現在のコードを投稿できますか? –

+1

コードを表示できますか?宿題でバグを見つけても問題ありませんが、コードを書いても問題ありません。 – dasblinkenlight

+0

あなたはどうやって82491513621になるのですか?それは '8 5 12 12 15'ではないでしょうか? – Default

答えて

2

を使用し、StringBuilderのための最終的なstringを取得するには、どのようなあなたがやる。単純なスイッチでは不十分です。

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

+0

@kronoz:ありがとうございます。 ToString()呼び出しを削除するために投稿を編集しました。 – Tudor

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); 
    } 
    

    ケース感度の世話をするchar配列から

。上記のコードは大文字のみで動作します。65は 'A'(aではなく)のASCIIコードです。

switch文を試してはいけません。恐ろしく見えます。

EDIT: あなたが本当に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; 
     ... 
    } 
} 

EDIT: あなたはループを必要とするstringAsNumbers.ToString();

+1

それは宿題ですが、 'switch'が必要かもしれません。 –

+0

はい、宿題はスイッチについてですが、それは必須ですが、最も簡単な方法を求めていました。 – samuraisxmali

+0

ok!更新された回答をご覧ください。 – ken2k

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; 
    .... 
} 

これで機能が準備完了です。文字列を繰り返して、各文字に対してトランスフォームを呼び出すことができます。