Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Строки. Замена нескольких подряд входящих символов 
V
    Опции темы
Metalex
Дата 10.3.2010, 21:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 635
Регистрация: 22.10.2008
Где: Украина-ZPсity

Репутация: нет
Всего: нет



Всем доброго времени суток! Помогите мне, пожалуйста, с C#! 
Задача такова:
Разработать архиватор: символы строки, которые повторяются заменить на последовательность - СиволЧислоПовторений, например: «fehhh   eryaaa» должна быть преобразована в строку вида: «feh3 erya3». Также реализовать обратную расшифровку.
Я попытался сделать средствами С++ не затрагивая СиШарп, но и там не все до конца получается..


--------------------
Don't let the system get you down.
PM WWW ICQ Skype   Вверх
Fortnox
Дата 11.3.2010, 00:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 373
Регистрация: 31.10.2008
Где: Ростов-на-Дону

Репутация: 14
Всего: 22



Шифрование:
Код

       private static string Encrypt(string input)
        {
            int count = 0;
            string outStr = "";
            char ch = ' ';

            // проходим по символам в строке
            for (int i = 0; i <= input.Length - 1; i++)
            {
                ch = input[i]; // запоминаем текущий символ 

                // цикл по проходу от текущего символа к концу строки 
                // (на случай, если до конца строки идет один и тот же символ)
                for (int j = i; j <= input.Length - 1; j++)
                {
                    // если текущий символ не равен начальному, то выходим из цикла, то есть:
                    // fehhgh
                    //   | |
                    //   |  --- значение input[j]
                    //   |
                    //   --- значение переменной ch
                    // input[j] не равно ch - значит символ уже не тот, выходим из цикла.
                    if (input[j] != ch)
                        break;
                    // иначе (символ все еще тот же), увеличиваем его кол-во (переменная count)
                    else
                        count++;
                }
                // добавляем текущий символ к нашей выходной строке
                outStr += ch; 

                // если символ встретился более одного раза
                if (count != 1)
                {
                    // добавляем значение переменной count к строке
                    outStr += count.ToString();
                    // устанавливаем значение счетчика равным количеству повторений символа минус 1
                    i += --count;
                }
                // сбрасываем счетчик количества повторений символа в 0
                count = 0;
            }
            return outStr;
        }


Расшифрование:
Код

private static string Decrypt(string input)
        {
            char ch = ' ';
            string outStr = "";

            // проходим по строке
            for (int i = 0; i <= input.Length - 1; i++)
            {
                // запоминаем текущий символ
                ch = input[i];

                // если текущий символ является цифрой
                if (char.IsDigit(ch))
                {
                    // конвертируем его в целочисленной значение
                    int len = Convert.ToInt32(ch.ToString());

                    // добавляем это значение в виде повторений символа ch в выходную строку
                    for (int j = 0; j <= len - 2; j++)
                        outStr += input[i - 1];
                }
                // иначе, добавляем символ к выходной строке
                else
                    outStr += ch;
            }
            return outStr;
        }


Вывод:
Код

Enter string: fehhh eryaaa
feh3 erya3
fehhh eryaaa


Это сообщение отредактировал(а) Fortnox - 11.3.2010, 00:42
PM MAIL   Вверх
Metalex
Дата 11.3.2010, 00:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 635
Регистрация: 22.10.2008
Где: Украина-ZPсity

Репутация: нет
Всего: нет



Fortnox, огромная просьба: прокомментируй код....


--------------------
Don't let the system get you down.
PM WWW ICQ Skype   Вверх
Fortnox
Дата 11.3.2010, 00:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 373
Регистрация: 31.10.2008
Где: Ростов-на-Дону

Репутация: 14
Всего: 22



Metalex, каюсь: после отправки сообщения, посмотрел на код и понял, что надо его прокомментировать. Сделано (первое сообщение отредактировано)
PM MAIL   Вверх
Metalex
Дата 11.3.2010, 00:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 635
Регистрация: 22.10.2008
Где: Украина-ZPсity

Репутация: нет
Всего: нет



Fortnox, Огромное спасибо! Завтра на чистую голову разбиратся буду.


--------------------
Don't let the system get you down.
PM WWW ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0438 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.