Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.03.2019, 20:34   #1
Irina8916
Новичок
Джуниор
 
Регистрация: 15.02.2019
Сообщений: 1
По умолчанию [C#] написать функцию сжатия строки

Добрый вечер! Подскажите пожалуйста. Надо написать функцию CompressStr(s), выполняющую сжатие строки s по следующему правилу: каждая подстрока строки s, состоящая из более чем четырех одинаковых символов с заменяется текстом вида c{K}, где К - количество символов с. Например, для строки s = bbbccccce функция вернет строку bbbc{5}e.
Так вот, есть код, но при запуске программы, если я ввожу строку bbbccccce, у меня в итоге выводится c{5}, подскажите пжлст, как сделать, чтобы в итоге выводилось bbbc{5}e? (на Си шарп).

Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp25
{
    public class stringCompress
    {
        public static string CompressStr(string s)
        {
            int i, i2, num;
            string sTemp, Result;
            char c;
            c = s[1];
            num = 1;
            Result = "";
            sTemp = "";
            for (i = 2; i < s.Length; i++)
            {
                if (s[i] == c) num++;
                if ((s[i] != c) || (i == s.Length))
                {
                    if (num > 4)
                    {
                        sTemp = sTemp + num;
                        Result = Result+c + '{' + sTemp + '}';
                    }
                    else
                        for (i2 = 1; i < num; i2++)
                            Result = Result + c;
                    c = s[i];
                    num = 1;
                }
               
            }
            return Result;

        }
    }
    class Program
    {
        static void Main(string[] args)
        {
           
            for (int j = 1; j < 5; j++)
            {
                Console.WriteLine("Введите строку: ");
                string stroka = Console.ReadLine();
                string res = stringCompress.CompressStr(stroka);

                Console.WriteLine(res);
            }
            Console.ReadKey();
        }
    }
    
}
Пожалуйста, оформляйте Ваш код согласно правилам.

Последний раз редактировалось Вадим Мошев; 15.03.2019 в 20:37.
Irina8916 вне форума Ответить с цитированием
Старый 15.03.2019, 21:43   #2
New man
Форумчанин
 
Регистрация: 24.01.2011
Сообщений: 774
По умолчанию

Код:
        public static string CompressStr(string s)
        {
            StringBuilder builder = new StringBuilder();
            for (int begin = 0; begin<s.Length;)
            {
                int end = begin + 1;
                while(end<s.Length && s[begin]==s[end])
                    ++end;
                if(end - begin > 4)
                {
                    builder.Append(s[begin]).Append('{').Append(end-begin).Append('}');
                }
                else
                {                    
                    builder.Append(s, begin, end-begin);
                }
                begin = end;
            }
            return builder.ToString();
        }
a.k.a. Angelicos Phosphoros
Мой сайт
New man вне форума Ответить с цитированием
Старый 15.03.2019, 21:45   #3
New man
Форумчанин
 
Регистрация: 24.01.2011
Сообщений: 774
По умолчанию

Единственное, я бы не советовал использовать этот алгоритм на практике.
Нужно обрабатывать эскейп-последовательности.

Если в строке будет { сама по себе, то декодер сломается.
a.k.a. Angelicos Phosphoros
Мой сайт
New man вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Написать функцию, которая меняет местами элементы указанной строки с элементами указанного столбца. Diana__ Общие вопросы C/C++ 1 22.03.2016 09:48
Написать функцию, выполняющую перевод строки Vladis1av Помощь студентам 0 25.03.2013 15:02
Сумма ряда с точностью Е=10-4, Сформировать обномерный массив, написать функцию для удаления строки... Dasha M Паскаль, Turbo Pascal, PascalABC.NET 1 06.05.2011 18:33
Как написать функцию. Строки паскаль Nubik Помощь студентам 1 27.02.2010 01:38