Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.07.25;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.035 c
14-1088965195
Интересующийся
2004-07-04 22:19
2004.07.25
DLL из EXE?


1-1089479468
SergP
2004-07-10 21:11
2004.07.25
Нужна функция поиска и замены


14-1089304046
Ivolg
2004-07-08 20:27
2004.07.25
Пердача


6-1085751039
ГудБой
2004-05-28 17:30
2004.07.25
Как в TTcpCLient указать таймаут.


9-1081184161
Cash
2004-04-05 20:56
2004.07.25
Смена покрытия





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский