私は数字で文字を変更したいと思っています。たとえば、aと1、bと2 ... zと26です。文字列 "hello"は次のようになります:82491513621。最も簡単な方法で、2番目はSWITCHステートメントでこれを行う方法です。私はこれを試みたが、休憩した。それは止まる。ありがとう。C#で文字列内のすべての文字を数値で変更する方法は?
答えて
を使用し、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);
以下のコードは、文字の表記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();
それは宿題ですが、 'switch'が必要かもしれません。 –
はい、宿題はスイッチについてですが、それは必須ですが、最も簡単な方法を求めていました。 – samuraisxmali
ok!更新された回答をご覧ください。 – ken2k
あなたが好きな機能を定義することができます。
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;
....
}
これで機能が準備完了です。文字列を繰り返して、各文字に対してトランスフォームを呼び出すことができます。
現在のコードを投稿できますか? –
コードを表示できますか?宿題でバグを見つけても問題ありませんが、コードを書いても問題ありません。 – dasblinkenlight
あなたはどうやって82491513621になるのですか?それは '8 5 12 12 15'ではないでしょうか? – Default