説明下手ですが頑張ります。
入力した単語を別の単語に変換する小さなプログラムを作成しています。入力された各文字は、コードのこのセクションを通過し、単語全体のインデックス位置に応じて別の文字に変更されます。
ここでの問題は、繰り返し文字がある場合、繰り返し文字は単語内の位置に応じて変化するのではなく、最初の出現に応じて変化することです。
たとえば、これは「bacca」という単語を作ったものです。それをコードに入れると、「vrwiy」に変更する必要がありますが、代わりに「vrwwr」に変更します。これもなぜだかわかります。これは、変換が必要な単語を switch ステートメントがループするためです。ただし、文字列のインデックス内の個々の位置に応じて各文字を変更する方法についての手がかりがありません。おそらく LastIndexOf() メソッドが機能すると思いましたが、代わりに順序を逆にするだけです。したがって、文字「a」を入力すると「n」と表示されますが、「aa」と入力すると、最初の「a」が「r」に切り替わります。2 番目の文字は IndexOf にあるためです。 1 get を "r" に変更します。
private void inputTbox_TextChanged(object sender, EventArgs e)
{
List<string> rawZnWordList = new List<string>();
foreach (char a in inputTextBox.Text)
{
switch (inputTextBox.Text.IndexOf(a))
{
case 0:
switch (a)
{
case 'a':
rawZnWordList.Add("n");
continue;
case 'b':
rawZnWordList.Add("v");
continue;
case 'c':
rawZnWordList.Add("a");
continue;
default:
break;
}
continue;
case 1:
switch (a)
{
case 'a':
rawZnWordList.Add("r");
continue;
case 'b':
rawZnWordList.Add("x");
continue;
case 'c':
rawZnWordList.Add("z");
continue;
default:
break;
}
continue;
case 2:
switch (a)
{
case 'a':
rawZnWordList.Add("t");
continue;
case 'b':
rawZnWordList.Add("l");
continue;
case 'c':
rawZnWordList.Add("w");
continue;
default:
continue;
}
continue;
case 3:
switch (a)
{
case 'a':
rawZnWordList.Add("u");
continue;
case 'b':
rawZnWordList.Add("i");
continue;
case 'c':
rawZnWordList.Add("o");
continue;
default:
break;
}
continue;
case 4:
switch (a)
{
case 'a':
rawZnWordList.Add("y");
continue;
case 'b':
rawZnWordList.Add("m");
continue;
case 'c':
rawZnWordList.Add("d");
continue;
default:
break;
}
continue;
default:
break;
}
}
string finalZnWord = string.Join("", rawZnWordList.ToArray());
outputTextBox.Text = finalZnWord;
}