Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.96/25: Рейтинг темы: голосов - 25, средняя оценка - 4.96
0 / 0 / 0
Регистрация: 29.10.2016
Сообщений: 39

Своя реализация метода Split

15.12.2016, 22:19. Показов 5089. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Написать реализацию метода Split. Не использовать сам метод или какие-либо библиотечные функции при этом. Не могу написать реализацию, не понимаю как это сделать.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
15.12.2016, 22:19
Ответы с готовыми решениями:

Странная работа метода Split
Товарищи, нужна ваша помощь. Я писал относительно сложную программу, и написал почти все правильно. Но возникла какая-то ерунда с методом...

Сохранение разделителей метода split в строковом массиве
Я вожу строку вида 5+2 или 5 + 2(с пробелами). Мне нужно сохранять символы арифметических операции в строковом массиве. То есть массив...

Каково назначение метода Split и какие параметры он принимает?
Обьясните пожалуйста, что делает этот метод для обьекта класс String, какие параметры он принимает и какие параметры нужно нам туда...

14
 Аватар для edward_freedom
1569 / 1448 / 303
Регистрация: 01.10.2011
Сообщений: 2,636
15.12.2016, 22:42
AndreyVoronin52,
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 public static class stringExtension
    {
        public static List<object> SplitEx(this string text, char _split)
       {
           var result = new List<object>();
           var startIndex = 0;
           for (int i = 0; i < text.Length; i++)
           {
               if (text[i] == _split)
               {
                   result.Add(text.Substring(startIndex, i - startIndex));
                   startIndex = ++i;
               }
           }
           return result;
       }
 
    }
1
0 / 0 / 0
Регистрация: 29.10.2016
Сообщений: 39
15.12.2016, 23:30  [ТС]
А что должно быть в _splint?
0
 Аватар для edward_freedom
1569 / 1448 / 303
Регистрация: 01.10.2011
Сообщений: 2,636
15.12.2016, 23:42
AndreyVoronin52, разделитель
0
0 / 0 / 0
Регистрация: 29.10.2016
Сообщений: 39
16.12.2016, 15:17  [ТС]
И ещё что должно быть написано в Main?

Добавлено через 14 минут
Мне нужен хотя бы пример использования.

Добавлено через 15 часов 1 минуту
Так же нужно: если символ-разделитель не задан, вызвать перегрузку, не принимающую аргументов.

Добавлено через 17 минут
Не знаю как вызвать эту перегрузку.
0
 Аватар для diadiavova
7259 / 2606 / 744
Регистрация: 11.04.2015
Сообщений: 4,150
Записей в блоге: 43
16.12.2016, 15:21
edward_freedom, есть у меня слабое подозрение, что сабстринг таки подпадает под определение "библиотечные функции", которые запрещено использовать по условию задачи.
0
 Аватар для edward_freedom
1569 / 1448 / 303
Регистрация: 01.10.2011
Сообщений: 2,636
16.12.2016, 16:01
diadiavova, да логично, тогда и от листа откажемся
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
 public static class stringExtension
    {
        public static string[] SplitEx(this string text, char _split)
        {
            int size = sizeArray(text, _split);
            var result = new string[size];
            int index = 0;
            var startIndex = 0;
            for (var i = 0; i < text.Length; i++)
            {
                if (text[i] == _split)
                {
                    result[index++] = text.SubstringEx(startIndex, i - startIndex);
                    startIndex = ++i;
                }
                else if(i == text.Length - 1)
                {
                    result[index++] = text.SubstringEx(startIndex, i - startIndex);
                }
            }
            return result;
        }
 
        public static int sizeArray(this string text, char _split)
        {
            return text.Count(letter => letter.Equals(_split));
        }
 
        public static string SubstringEx(this string text, int startIndex, int lenght)
        {
            var boof = new char[lenght];
            var index = 0;
            for (var i = startIndex; i < text.Length; i++)
            {
                boof[index++] = text[i];
                if(index >= lenght) break; 
            }
            return new string(boof);
        }
    }
0
Неадекват
 Аватар для freeba
1501 / 1237 / 248
Регистрация: 02.04.2010
Сообщений: 2,807
16.12.2016, 16:15
Какие то переусложненные реализации

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
static class Extensions
    {
        public static IEnumerable<string> SplitEx(this string source, char splitter)
        {
            var buffer = string.Empty;
 
            for (int i = 0; i < source.Length; i++)
            {
                if (source[i] != splitter) buffer += source[i];
                else
                {
                    yield return buffer;
                    buffer = string.Empty;
                }
            }
            yield return buffer;
        }
    }
0
16.12.2016, 16:53

Не по теме:

freeba, ваша реализация творит конкатенацию строк в цикле. Такое сложно эффективным назвать. Не всегда малое количество кода - признак лучшего решения. :) Без обид.

0
 Аватар для diadiavova
7259 / 2606 / 744
Регистрация: 11.04.2015
Сообщений: 4,150
Записей в блоге: 43
16.12.2016, 17:18
Цитата Сообщение от edward_freedom Посмотреть сообщение
тогда и от листа откажемся
Зачем? Когда запрещено использовать функции, специально предназначенные для обработки строк, то такое требование можно понять. А лист, как мне кажется, здесь вполне уместен.
Цитата Сообщение от Usaga Посмотреть сообщение
Не всегда малое количество кода - признак лучшего решения.
Ну решение-то действительно хорошее, если не считать конкатенацию (которая к тому же еще и, по сути дела, является функцией обработки строк). Заменить стрингбилдером и нормуль.
0
Неадекват
 Аватар для freeba
1501 / 1237 / 248
Регистрация: 02.04.2010
Сообщений: 2,807
16.12.2016, 18:08
Usaga, придирки, речь идет о самостоятельной реализации библиотечной функции которая заведомо проиграет встроенной по производительности. Тем более, что ТСом речь о скорости не поднималась.

PS: В малом количестве кода проще разобраться, если он конечно не маньяком-олимпиадником создан. Так что меньше количество строк всегда must have
0
Эксперт .NET
 Аватар для Usaga
14304 / 9388 / 1355
Регистрация: 21.01.2016
Сообщений: 35,401
16.12.2016, 18:44

Не по теме:

freeba, я всё понимаю, но в задании ТС-а было озвучено создание аналога Split, который возвращает массив, а не итератор). Так, что ваше решение не проходит))



Добавлено через 1 минуту

Не по теме:

Так, что решение мистера edward_freedom на данный момент самое подходящее.



Добавлено через 3 минуты

Не по теме:

Цитата Сообщение от freeba Посмотреть сообщение
Так что меньше количество строк всегда must have
Вот уж ни разу, если это сильно вредит производительности. >:o

2
3 / 3 / 0
Регистрация: 13.10.2016
Сообщений: 48
19.12.2016, 09:42
Цитата Сообщение от Usaga Посмотреть сообщение
freeba, ваша реализация творит конкатенацию строк в цикле. Такое сложно эффективным назвать.
А чем плоха конкатенация строк?
0
907 / 664 / 318
Регистрация: 23.10.2016
Сообщений: 1,543
19.12.2016, 09:50
Leslov, при конкатенации создаётся новая строка, а не изменяется старая, что влечет к дополнительной операции выделения памяти.
0
Эксперт .NET
 Аватар для Usaga
14304 / 9388 / 1355
Регистрация: 21.01.2016
Сообщений: 35,401
19.12.2016, 09:53
Leslov, ничем, если тебе нужен именно результат конкатенации. А если ты используешь конкатенацию для организации накопительного буфера только потому, что "+=" написать гораздо проще и быстрее, чем нормальную реализацию этого самого буфера, то ты захламляешь память мусором, добавляя работы сборщику. А это уже минус производительности.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
19.12.2016, 09:53
Помогаю со студенческими работами здесь

Реверс массива, полученного в результате работы метода Split()
Добрый день. Как сделать что б Split начинал работу с конца строки? То есть что бы строка=&quot;abc, def, ghi, gkl, mno&quot; была в...

Реализация симплекс-метода
Всем привет! Помогите, пожалуйста, встретил статью в Интернете, ниже. Сам новичок в С#, не могу понять простых вещей. ...

Реализация метода Симпсона
Добрый помогите пожалуйста с написание программы тема звучит так : Реализация метода Симпсона расчета определенного интеграла на языке С#...

Реализация Метода Ньютона
Всем доброго утра.Ребят,нужна помощь в реализации метода Ньютона(касательных) на С#. Нашел множество вариантов,но,к сожалению,разобраться...

Реализация метода интерфейса
Всем доброго времени суток. При попытке запуска выдает ошибку что не реализован метод getLen. я так понимаю все дело в объявлении. но...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru