Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Строки


Автор: Real 11.3.2008, 21:45
Надо заменить повторяющие символы в строке на один символ.
(например «ee» -> «e»).
(например «teeeeest» -> «test»).
(например «aabbcc» -> «abc»).


Код

using System;

namespace StringDelete
{
    class Program
    {
        static string Delete(string s)
        {
            string[] mas = s.Split(' ');
           
           
            for (int i = 0; i < mas.Length;i += 1)
            {
                for (int k = 1; (k < mas[i].Length-1) ; k += 1)
                {
                    //mas[i][k] = null;
                   // if (mas[i][k] == mas[i][k - 1]) mas[i].Remove(mas[i].IndexOf(mas[i][k]));
                    if (mas[i][k] == mas[i][k - 1]) mas[i].Remove(k);
                 
                }
            }
            return string.Join(" ", mas);
        }

        static void Main(string[] args)
        {
            string s = Console.ReadLine();
            Console.WriteLine(Delete(s));
            Console.ReadLine();
        }
    }
}

Автор: Rififi 11.3.2008, 23:36
Код

static readonly Regex rx = new Regex(@"(.)\1+", RegexOptions.Compiled);
static string Delete(string s)
{    
    return rx.Replace(s, "$1");
}

Автор: Real 11.3.2008, 23:49
Спасиба.

А что означает
- RegexOptions.Compiled
-  "(.)\1+"
- $1

Автор: Rififi 12.3.2008, 10:13
RegexOptions.Compiled = создаётся прекомпилированная сборка в памяти. Инициализация регэкспа занимает больше времени, но в runtime работает быстрее
(.)\1+ = совпадение с любым повторяющимся символом с запоминанием самого символа в группе
$1 = замена всей совпавшей последовательности на первую регэксповую группу

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)