3

文字置換用のこの簡単なコードがあります。追加したいのは、つまり、文字 A を文字 T に置き換えると、すべての T 文字も自動的に A に置き換えられるということです。したがって、「atatatat」という単語がある場合、次のコードはその単語を「tttttttt」に変更しますが、「tatatata」に変更する必要があります。どうすればこれを修正できますか?

private void button3_Click(object sender, EventArgs e)
{
    String key= this.textBox1.Text;
    String letter1 = this.textBox2.Text;
    String letter2 = this.textBox3.Text;

    StringBuilder newKey = new StringBuilder();
    newKey.AppendLine(key);
    newKey.Replace(letter1, letter2);
    this.textBox4.Text = noviKljuc.ToString();
}

この行を追加してみました:newKey.Replace(letter2, letter1);しかし、これは単語を「aaaaaaaa」に変更します

4

3 に答える 3

5

文字を反復処理して、1 つずつ変更するだけです。

foreach(char c in key){    
    if(c==letter1){
        newKey.Append(letter2);
    }else if(c==letter2){
        newKey.Append(letter1);
    }else{
        newKey.Append(c);
    }
}
于 2013-03-17T19:22:14.990 に答える
1

各文字を反復処理し、変更を続行するかどうかを検出し、最初の置換が行われた場合にのみ 2 番目の置換を行う必要があります。

// Check to see if we can find the 1st char to replace in the string
bool doReplace = key.Any(c => c == originalChar);

if (doReplace)
{
    foreach (char c in key)
    {
        if (c == originalChar)
        {
            newKey.Append(alternateChar);
        }
        else if (c == alternateChar)
        {
            newKey.Append(originalChar);
        }
        else
        {
            newKey.Append(c);
        }
    }
}
else
{
    newKey = key;
}

this.textBox4.Text = newKey.ToString();
于 2013-03-17T19:34:28.613 に答える
0

これを試してください

var result = String.Join("", 
   key.Select(c => c == letter2 ? letter1 : c == letter1 ? letter2 : c  ));
于 2013-03-17T19:55:24.290 に答える