たとえば、文字を数字で変更したい:a with 1、b with 2 ... z with 26.したがって、文字列「hello」は次のようになります:82491513621.最初の質問は、これを最も簡単に行う方法です。方法、および2番目:SWITCHステートメントでこれを行う方法。私はこれを試しましたが、休憩後。止まります。ありがとう。
3 に答える
何をするにしても、ループが必要です。シンプルなスイッチでは不十分です。
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);
次のコードは、文字の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();
次のような関数を定義できます。
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;
....
}
これで関数の準備ができました。文字列を繰り返し処理し、各文字に対して変換を呼び出すことができます。