Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Для новичков > Количество повторяющихся записей в файле |
Автор: gnokki200 23.4.2008, 10:52 | ||
Доброго времени суток уважаемые форумчане! Возникла задача на С следующего характера: Есть текстовый файл со строковыми данными. Неоходимо на выходе получить уникальные записи и сколько раз они повторяются. На пхп делаю очень просто:
Но вот как грамотно и оптимально реализовать это на С, ума не приложу. ![]() Теоретически предполагаю, что надо создать два динамических массива, один для строковых данных, другой для количества записей и при получении новой записи искать значение в массиве строковых данных, если найдено, то инкремент в массиве с количеством, если нет, то увеличивать массивы. Хотя очень хочется верить, что такую задачу можно реализовать проще, например как в пхп. ![]() Помогите пожалуйста кто чем сможет. Заранее благодарен! ![]() |
Автор: Rififi 23.4.2008, 12:09 |
gnokki200, в C++ было бы примерно то же самое. для Си - сложнее, тебе потребуется динамический массив таких структур: struct string_info { unsigned int hash; // хэш-сумма строки unsigned int count; // счетчик повторов const char* str; // сама строка }; 1. создаешь массив стуктур размера N (malloc) 2. в цикле считываешь строку во временный буфер 2.1 если номер считанной строки превышает размер массива структур, делаешь переаллокацию с N = N*2 3. вычисляешь хэш для считанной строки (функцию хэширования ищешь в сети или пишешь сам) 4. ищешь совпадения хэша в массиве структур string_info 4.1 если совпадение найдено, увеличить счетчик 4.2 если не найдено, инициализация структуры (счетчик=1, копия строки через strdup) 5. вывод результатов 6. освобождение памяти Добавлено через 38 секунд PS. уникальные записи не могут повторяться |
Автор: gnokki200 23.4.2008, 12:49 |
Rififi, благодарствую! А подскажи пожалуйста, если в С++ это реализовать проще, то имеет смысл выполнить ее на С++? Прошу прощения, что не уточнил C/C++ ![]() |
Автор: Rififi 23.4.2008, 13:22 | ||
gnokki200, в C++ будет проще, потому что как и в php есть обьектные аналоги для строки и ассоциативного массива
|
Автор: gnokki200 23.4.2008, 14:09 |
Rififi, миллионы спасибо!!! Все получилось! ![]() Для успокоения совести на досуге помучаю конечно еще и на С. ![]() PS. если кто забредет сюда с подобным вопросом, вот еще похожий топик http://forum.vingrad.ru/topic-188408.html |