Как мне изменить и заменить слово
У меня есть массив слов. Чего я хочу добиться, так это если есть "успех", и я хочу изменить его на "XXXXXXX". Как вы можете видеть в цикле, мне удается получить длину слова, которое соответствует "успеху". Но я не могу повернуть цикл вспять, чтобы заменить слово, которое я нашел. Я успешно заменяю первый последний, но не другие. Как я могу изменить цикл, чтобы вернуться от последнего слова "успех" и заменить его.
public char[,] CrossWord { get { var table = new char[,] { //1 2 3 4 5 6 7 {'S','U','C','C','E','S','S'},//1 {'E','U','S','S','E','C','U'},//2 {'U','S','C','C','C','E','C'},//3 {'S','S','U','C','E','C','C'},//4 {'S','E','S','S','E','S','S'},//5 {'U','C','S','E','U','S','S'},//6 {'C','C','S','S','E','E','S'},//7 {'S','U','S','S','S','S','E'},//8 {'U','S','E','S','S','C','S'} //9 }; return table; } } public char[,] ReplaceWord(string searchWord, string replaceWord) { var newReplaceCrossWordTable = (char[,])CrossWord.Clone(); var totalRowNumber = newReplaceCrossWordTable.GetLength(0); var totalColumnNumber = newReplaceCrossWordTable.GetLength(1); String word; word = "SUCCESS"; int len = word.Length; int R; int C; R = 9; C = 7; Console.WriteLine("*** Crossword Table *****"); for (var row = 0; row < totalRowNumber; row++) { for (var column = 0; column < totalColumnNumber; column++) { Console.Write(newReplaceCrossWordTable[row, column]); if (CrossWord[row, column] != word[0]) { } for (int dir = 0; dir < 8; dir++) { int k, rd = row + x[dir], cd = column + y[dir]; for (k = 1; k < len; k++) { //CrossWord[row, column] = 'X'; // If out of bound break if (rd >= R || rd < 0 || cd >= C || cd < 0) { break; } // If not matched, break if (CrossWord[rd, cd] != word[k]) { break; } // Moving in particular direction rd += x[dir]; cd += y[dir]; } // If all character matched, then value of k // must be equal to length of word if (k == len) { //newReplaceCrossWordTable[row, column] = 'X'; //Console.Write(newReplaceCrossWordTable[row, column]); for (int di = 0; di < 8; di++) { int kk, r = row + x[dir], c = column + y[dir]; for (kk = 1; kk < len; kk++) { //CrossWord[row, column] = 'X'; // If out of bound break if (rd >= R || rd < 0 || cd >= C || cd < 0) { break; } // Moving in particular direction r -= x[dir]; c -= y[dir]; newReplaceCrossWordTable[row, column] = 'X'; } } } } } Console.WriteLine(); } Console.WriteLine("************************"); return newReplaceCrossWordTable; } }
Что я уже пробовал:
Как вы можете видеть, я успешно получаю длину слова. Мне удается изменить 1-й последний, но не остальные.
*** Crossword Table ***** SUCCESS EUSSECU USCCCEC SSUCECC SESSESS UCSEUSS CCSSEES SUSSSSE UXESSCS ************************ //This is what i wanted *** Crossword Table ***** xxxxxxx EXSSECU UXXCCEC SXUXECC SXSSXSS UXSEUXS CXSSEEX SXSSSSE UXESSCS ************************ }}
OriginalGriff
Вам придется объяснить гораздо более подробно, что вы пытаетесь сделать - я, например, не могу понять, голова или хвост из вашего описания.
Итак, начните с того, что вы получаете в качестве входных данных - массив в "кроссворде", я подозреваю, - и ожидаете в качестве выходных данных - вообще без понятия-а затем переходите к тому, что на самом деле означают "обратный цикл" и "замена всех нужных символов".
Тогда расскажите нам, что вы пробовали, где вы застряли, и какая помощь вам нужна.
Помните, что мы не можем видеть ваш экран, получить доступ к вашему жесткому диску или прочитать ваши мысли - мы получаем только то, что вы печатаете для работы.
Используйте виджет "улучшить вопрос", чтобы отредактировать свой вопрос и предоставить более подробную информацию.
Member 14912096
Я уже обновил вопрос. Надеюсь, вы меня поймете. Спасибо!
Patrice T
Постарайтесь показать желаемый результат.
Member 14912096
я уже обновился с желаемым результатом
Richard MacCutchan
Я согласен с OriginalGriff в этом вопросе; я не вижу, какие критерии вы используете для замены символов на "X". В первой строке это нормально, вы заменяете все слово, но в остальном это выглядит так, как будто вы просто заменяете случайные буквы.