Добавьте букву между парой дублированных букв C # - PullRequest
0 голосов
/ 01 марта 2019

Я хочу добавить «X» между парой дублированных букв, например, если это «SSM», я хочу, чтобы это были «SX» и «SM», это то, что я сделал, но это не так.t добавить «X», как я могу это исправить?len is "SSM"

 for (int i = 0; i < len.Length - 1; i++)
            {

            if (len[i] == len[i + 1])
            {
                Nlen += 'X';
            }
        }

Stringbuilders потребует, чтобы я сильно изменил свой код, как я могу решить их без использования string Builders?

Ответы [ 5 ]

0 голосов
/ 02 марта 2019

Вы можете использовать подстановку регулярных выражений

var len = "SSM";
var replaced = Regex.Replace(len, @"([a-z,A-Z])\1", @"$1X$1");
Console.WriteLine(replaced);

В этом случае вывод будет "SXSM"

Объяснение регулярных выражений

  • ([a-z,A-Z]) соответствует любому символу azили AZ и сохраняет в группе захвата 1
  • \1 обратная ссылка на группу захвата 1. Если предыдущее совпадение было "S", то для полного совпадения следующий символ должен был бы быть "S "
  • $1X$1 Подстановочная строка.Принимает группу захвата 1, как в нашем примере, букву «S» и помещает «X» между двумя S
0 голосов
/ 02 марта 2019

Похоже, Nlen не учитывает текущий символ в массиве:

Nlen += len[i] + ‘X’
0 голосов
/ 01 марта 2019

Это даст вам SXSM, из вашего вопроса я не был уверен, хотите ли вы, чтобы они были сгруппированы попарно, т.е. (SX, SM) или просто вставьте X.

        string len = "SSM";
        StringBuilder Nlen = new StringBuilder();
        for (int i = 0; i < len.Length; i++)
        {

            if ((i+1) < len.Length && len[i] == len[i + 1])
            {
                Nlen.Append(len[i]);
                Nlen.Append('X');
            }
            else
            {
                Nlen.Append(len[i]);
            }
        }
0 голосов
/ 01 марта 2019

Вот простой подход:

var chars = input.ToList();
for (var index = input.Length - 1; index > 0; index--)
{
    if (chars[index] == chars[index - 1])
        chars.Insert(index, 'X');
}
return new string(chars.ToArray());

SSM => SXSM
SSSM => SXSXSM

0 голосов
/ 01 марта 2019

У меня нет моего редактора VS здесь, но что-то похожее на это:

char lastChar = '';
StringBuilder sb = new StringBuilder();
foreach(char c in len)
{
  if (c == lastChar) { sb.Append('X') }
  sb.Append(c);
  lastChar = c;
}

return sb.ToString();
...