Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.07.25;
Скачать: CL | DM;

Вниз

Удаление дубликатов с подсчетом повторов.   Найти похожие ветки 

 
Pavelkq   (2004-07-09 06:37) [0]

Здравствуйте! Имею заполненный и упорядоченный TStringList. Нужно из него данные записать в массив, чтобы дубликаты исчезли, но количество повторов тоже занеслось в массив (именно поэтому я не использую встроенную функцию удаления дубликатов).
 Реализовал циклическим сравнением текущего значения с последующим. Если они равны, то счетчик увеличивается. Если нет, то текущее значение вместе со счетчиком заносится в массив.
 Проблема возникает на последнем значении. Ведь его нельзя сравнить с последующим, т.к. его нет. Приходится его сочинять, т.е. искуственно добавлять.
 Есть ли другой алгоритм такой процедуры?


 
MBo ©   (2004-07-09 06:44) [1]

в цикле - вот встал ты на какую-то новую строку, записал ее, сделал счетчик 1, идешь дальше, инкрементируя счетчик, пока строка не изменится или не достигнешь конца - тогда записываешь счетчик. вроде бы никаких проблем не видно.


 
Denisww ©   (2004-07-09 06:48) [2]

..если упорядоченно
k:=0;
for i:=0 to 10 do begin
if (i>0)and(s[i-1]=s[i]) then continion;
a[k]:=s[i];inc(k)
End;


 
Pavelkq   (2004-07-09 06:49) [3]

Ага, т.е. сохранить во временную переменную предыдущее значение (или прямо из массива)? Так можно:-) Не проснулся еще. Спасибо!


 
Pavelkq   (2004-07-09 06:57) [4]

Ах, нет, тогда проблемы возникнут на первом элементе массива. Он же пустой. Разве что предустановить его в первое значение TStringListа, а потом цикл начать снова с нуля.
 [2]-теоретически, да. Однако, в первом же проходе при i=0 получится s[i-1]=s[-1], что однозначно будет ошибкой.


 
MBo ©   (2004-07-09 07:07) [5]

Если тебе это нужно для работы, то временно оставь ее, возьми учебник и задачник какого-нибудь программистского колледжа, например, по паскалю и тщательно все прорешай, не пропуская ни одной задачи, даже типа "вывести все нечетные двузначные числа" или "объединить два возрастающих массива из 5 элементов в один возрастающий из 10 элементов" Элементарные задачи требуют элементарной здравой логики и некоторого количества упражнений.

Иначе все постоянно будет сводиться к
>тогда проблемы возникнут на первом элементе массива
или
>TStringList болеет. Как вылечить? (
хотя лечить нужно совсем не TStringList.


 
Pavelkq   (2004-07-09 07:18) [6]

С задачником, Вы правы. Знаний не достаточно. Но для того и общение, чтобы помочь друг другу. Задача простая. Я ее решил, но хотелось бы изящно это сделать!
 А с TStringList Вы не правы. Проблема действительно была. Это уже не порвое чудо, которое я встречал в Дельфи. Например, при вызове DLL у меня вдруг самопроизвольно менялись значения переменных типа BOOLEAN и BYTE. Но там я грешил на DLL, т.к. он сторонней разработки.
 Чтобы примерно оценить задачу, часть старого кода можно посмотреть тут http://delphimaster.net/view/1-1088672516/


 
Думкин ©   (2004-07-09 07:23) [7]

> [6] Pavelkq   (09.07.04 07:18)
> Это уже не порвое чудо, которое я встречал в Дельфи.

Поверьте, чем больше вы будете работать с Дельфи и чем быстрее последуете совету, тем быстрее у вас начнет уменьшаться количество чудес и т.п.
Чем дольше занимаешься программированием, тем с большей легкостью приписываешь ошибки себе и искать их начинаешь у себя вначале, а не только в Дельфи или в "Windows must die". Удачи. :)


 
Denisww ©   (2004-07-09 11:09) [8]

ты не понял
первый элемент он ие сть первый

a[0]:=s[0];k:=1;
for i:=1 to 10 do begin
if s[i-1]<>s[i] then begin a[k]:=s[i];inc(k)end


 
Anatoly Podgoretsky ©   (2004-07-09 11:27) [9]

Это не первое чудо, которое мы встречаем здесь


 
Erik1   (2004-07-09 14:12) [10]

Да тяжко тебе придется, сначала надо несколько лет набирать опыт,чтобы чудеса прекратились. Да и потом просто будеш знать, что баги в коде есть, но лучше их нетрогать.



Страницы: 1 вся ветка

Текущий архив: 2004.07.25;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.044 c
14-1088722657
kaif
2004-07-02 02:57
2004.07.25
Философские вопросы


14-1088763429
Igorek
2004-07-02 14:17
2004.07.25
Грусно - до чего же ламерство окрепло...


1-1089259525
Артем К.
2004-07-08 08:05
2004.07.25
Форма без заголовка, без рамки, но может изменять размеры?


1-1089286968
Васька
2004-07-08 15:42
2004.07.25
Инсталлер


1-1089624951
Snip
2004-07-12 13:35
2004.07.25
Owner