Простая проблема с заменой строкового значения C # - PullRequest
1 голос
/ 23 июля 2011

Я немного связан с проблемой, которая должна быть посредственной, но, похоже, я не могу реализовать решение.

У меня есть кнопки, с одним символом на каждой, 26, если быть точным (английский алфавит), Когда я щелкаю по любому из них, цикл перебирает строку для текстового значения на кнопках и заменяет его кавычками.

Код работает, и он печатает новый алфавит без нажатого символа. Но когда я нажимаю другую кнопку, он возвращает новый алфавит, хотя и с ранее удаленным символом, и удаляет новый нажатый символ.

Код выглядит следующим образом

static string alphabet = "abcdefghijklmnopqrstuvwxyz";
static string newAlphabet = string.Empty;
Button tempBtn = (Button)sender;

for (int i = 0; i < alphabet.Length; i++)
{
  if (alphabet[i].ToString().Contains(tempBtn.Text))
  {
    newAlphabet = alphabet.Replace(tempBtn.Text, ""); 

    MessageBox.Show(newAlphabet);
  }
}

Извините за грамматические или орфографические ошибки, английский не мой родной язык.

С уважением, HC

Ответы [ 4 ]

2 голосов
/ 23 июля 2011

Эта строка

 newAlphabet = alphabet.Replace(tempBtn.Text, ""); 

означает, что вы всегда возвращаетесь к "abcdefghijklmnopqrstuvwxyz" и заменяете его.

Если вы хотите продолжить замену букв, вам нужно заменить на newAlphabet.

1 голос
/ 23 июля 2011

Более простое решение было бы:

static string alphabet = "abcdefghijklmnopqrstuvwxyz";

private void button1_Click(object sender, EventArgs e)
{
  var tempBtn = (Button)sender;
  alphabet = alphabet.Replace(tempBtn.Text, "");
  MessageBox.Show(alphabet);
}

Примечание 1:
Если код, который вы разместили, находится в вашем методе события нажатия кнопки, он не будет компилироваться.В C # нельзя объявлять статические переменные внутри методов.

Примечание 2:
Строки являются неизменяемыми, поэтому alphabet.Replace() возвращает новую строку без влияния на оригинал.

0 голосов
/ 23 июля 2011

Обратите внимание, что строки неизменны в C #. «newAlphabet» постоянно заменяется измененным «алфавитом». Это никогда не будет придерживаться.

0 голосов
/ 23 июля 2011

Если цель состоит в том, чтобы убрать нажатую букву из списка:

static string newAlphabet = "abcdefghijklmnopqrstuvwxyz";
Button tempBtn = (Button)sender;

newAlphabet = newAlphabet.Replace(tempBtn.Text, ""); 

MessageBox.Show(newAlphabet);
...