#1 08.04.11 08:18
[C++ Builder] Вывод на экран символов, которые встречаются только один
Нужно из входного потока символов вывести только те символы, которые встречаются в тексте только один раз. Не могу понять, в чем ошибка.
Код::
TStringList *list = new TStringList();
int i=1, len;
memGet->Clear();
list->Text = memEnter->Text;
len=list->Strings[i].Length();
for (i=0;i<len;i++)
{
int count=0;
for(int j=0;j<len;j++)
{
if (list->Strings[i]==list->Strings[j])
count++;
}
if (!count)
memGet->Lines->Add(list->Strings[i]);
}
delete list;Offline
#2 08.04.11 11:42
Re: [C++ Builder] Вывод на экран символов, которые встречаются только один
кхм... может ты тогда расскажешь по каждой строчке чего ты тут делаешь? ну, так сказать, чтобы ты сам понимал чего ты тут вытворяешь...
смотрим:
Nirvash написал(а):
Код::
int i=1, len; ... len=list->Strings[i].Length();
1. зачем тебе длина второй строки?
Nirvash написал(а):
Код::
for (i=0;i<len;i++)
2. этот цикл для перебора чего нужен?
Nirvash написал(а):
Код::
for(int j=0;j<len;j++)
3. а этот цикл чего перебирает?
ты бы накидал для начала алгоритм простым русским текстом, а потом уже перекладывал на язык программирования... а то напишешь фигню какую-то, а потом ищешь ошибки...
Offline
#3 08.04.11 14:47
Re: [C++ Builder] Вывод на экран символов, которые встречаются только один
1. Это просто присваивание длины строки параметру len.
2. Для перебора первой строки.
3. Для перебора второй строки, вернее перебор той же строки.
Если элементы совпадают, добавляем в счетчик.
Далее выводим только те символы, чей счетчик равен единице.
Offline
#4 08.04.11 15:04
Re: [C++ Builder] Вывод на экран символов, которые встречаются только один
ну, тогда почитай документацию на тип TStringList, какие методы и поля он имеет, как с ними работать... так же надо тебе почитать про тип TString, какие методы и поля он предоставляет для доступа непосредственно к каждому символу строки.
Offline
#10 08.04.11 15:50
#11 08.04.11 15:57
#12 08.04.11 15:58
Re: [C++ Builder] Вывод на экран символов, которые встречаются только один
Jaguar, туго до меня доходит, однако :)
Draloskop, нет. У нас есть входной поток символов. Например 'aaаbbcdddd'. Проходим по всей строке и в memGet выведется только c. Таким образом, надо вывести только те символы, которые встречаются один раз.
P.S. на С++ такую задачу уже решал, а вот в Builder'е сложнее.
Исправлено Nirvash (08.04.11 15:59)
Offline
#13 08.04.11 16:07
Re: [C++ Builder] Вывод на экран символов, которые встречаются только один
Короче вот тебе алгоритм, прямо из печки, свеж и пахнет вкусно. Решит любую подобную задачу: и твою, и мою и даже если надо будет найти букву, которая встретилась ровно 666 раз в тексте.
Допустим ты используешь самый обыкновенный char[], AnsiString и иже с ними. Там всего 256 уникальных символов может быть. Создаёшь массив из обычных целых чисел. Берёшь первый символ из входного потока. Допустим у него код 0x30 = 48. Ты увеличиваешь 48-й элемент своего массива целых чисел на единичку. Переходишь к следующему символу и заново.
Потом, как обработаешь весь текст - пробегаешь по массиву целых чисел и выводишь все символы, у которых там в ячейке единичка будет. Варьируя вот это последнее условие можешь менять логику выборки своей.
Offline
#14 08.04.11 16:08
#15 08.04.11 16:09
Re: [C++ Builder] Вывод на экран символов, которые встречаются только один
Nirvash написал(а):
Draloskop, нет. У нас есть входной поток символов. Например 'aaаbbcdddd'.
вот как раз "да"... пойми, входной поток - это не одна строка... это может быть и многострочный текст....
хорошо... предположим, что ты запутался и принял массив строк, за массив символов... объясни мне, на кой ты бирешь тогда очередной символ и сравниваешь со всеми символами в строке? ведь вложенный цикл именно это показывает...
на самом деле твоя задача сводится к тому, чтобы пройтись по тексту (по всем символам всех строк) и заполнить простой массивчик из 255 элементов... ну, либо прям создавать тот самый "алфавит", или хэш-таблицу, соответствия символу кол-во появлений в тексте... чуешь разницу? т.е. реально тут один цикл по строкам, второй (вложенный) по каждому символу в строке... а у тебя чего там написано?
Offline

