在一对重复的字母C#

时间:2019-03-01 20:35:52

标签: c# duplicates

我想在一对重复的字母之间添加一个“ X”,例如,如果它是“ SSM”,我希望它是“ SX”和“ SM”,这就是我所做的,但是它没有添加“ X”,我该如何解决? len是“ SSM”

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

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

Stringbuilders将要求我在代码中进行很多更改,如何在不使用stringbuilders的情况下解决它们?

5 个答案:

答案 0 :(得分:1)

这是一种简单的方法:

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

答案 1 :(得分:0)

我没有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();

答案 2 :(得分:0)

这将为您提供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]);
            }
        }

答案 3 :(得分:0)

看起来Nlen并未考虑数组中的当前字符:

Nlen += len[i] + ‘X’

答案 4 :(得分:0)

您可以使用正则表达式替换

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

在这种情况下,输出为“ SXSM”

正则表达式说明

  • ([a-z,A-Z])与任何字符a-z或A-Z匹配并存储在捕获组1中
  • \1返回捕获组1的引用。如果上一个匹配项是“ S”,则要使其完全匹配,下一个字符将必须是“ S”
  • $1X$1替换字符串。将捕获组1像我们的示例中的字母“ S”一样,并在两个S之间插入一个“ X”