1

たとえば、文字を数字で変更したい:a with 1、b with 2 ... z with 26.したがって、文字列「hello」は次のようになります:82491513621.最初の質問は、これを最も簡単に行う方法です。方法、および2番目:SWITCHステートメントでこれを行う方法。私はこれを試しましたが、休憩後。止まります。ありがとう。

4

3 に答える 3

2

何をするにしても、ループが必要です。シンプルなスイッチでは不十分です。

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

Console.WriteLine(output);

いくつかの説明: すべての文字にはアルファベット順に関連付けられた数字の ASCII コードがあるため、文字を表す任意の char から「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);
于 2012-01-14T12:39:11.587 に答える
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;
        ...
    }
}

編集: のファイナルを取得するstringにはStringBuilder、使用しますstringAsNumbers.ToString();

于 2012-01-14T12:38:03.363 に答える
0

次のような関数を定義できます。

int transform(char ch)
{
}

これは、辞書を使用して実装できます。

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

または、あなたが述べたようにスイッチを使用します:

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

これで関数の準備ができました。文字列を繰り返し処理し、各文字に対して変換を呼び出すことができます。

于 2012-01-14T12:41:01.683 に答える