Найти повторяющиеся строки в файле и их количество - C (СИ)
Формулировка задачи:
Здравствуйте! Есть текстовый файл с ненормированными длинами строк. Надо найти повторяющиеся строки и их количество. Важный момент - файл уже отсортирован и имеет вид:
ABC 123
ABC 123
ABCF
TWR WER TER
TW ET2342
TW ET2342
TW ET2342
То есть, повторяющиеся строки идут подряд. На выходе проги получить надо такое:
ABC 123 - 2
TW ET2342 - 3
Суть моего кода в том, что я сравниваю по паре строк и минус как раз тоже в этом)
Подскажите, как сделать, чтобы считало больше двух повторений?
Спасибо.
while(!feof(fp))
{ c=1;
fgets(str1, 126, fp);
fgets(str2, 126, fp);
if(stpcpy(srt1,str2)==0)
{
c++;
printf("%d - %s",c,str2);
}
}Решение задачи: «Найти повторяющиеся строки в файле и их количество»
textual
Листинг программы
c=1;
fgets(str2, 126, fp);
while(!feof(fp))
{
fgets(str1, 126, fp);
if(strcmp(str2,str1)) {
if(c>1) {
printf("%d - %s",c,str2);
c=1;
}
strcpy(str2,str1);
} else {
c++;
}
}
if(c>1) {
printf("%d - %s",c,str2);
}
Объяснение кода листинга программы
В этом коде выполняется следующая последовательность действий:
- Переменная
cинициализируется значением 1. - В переменную
str2считывается строка из файла. - Пока файл не будет прочитан до конца (это проверяется функцией
feof), выполняются следующие действия:- В переменную
str1считывается следующая строка из файла. - Сравниваются две последние прочитанные строки. Если они не совпадают, то выполняются следующие действия:
- Если значение переменной
cбольше 1, то выводится сообщение с количеством повторений и последней повторенной строкой. Значение переменнойcсбрасывается в 1. - Строка из переменной
str2копируется в переменнуюstr1. - Если строки совпадают, то значение переменной
cувеличивается на 1.
- В переменную
- Если значение переменной
cбольше 1 после прочтения всего файла, то выводится сообщение с количеством повторений и последней повторенной строкой. Используемые функции:fgets- считывает строку из файла в указанную переменную.feof- проверяет, достигнут ли конец файла.strcmp- сравнивает две строки.strcpy- копирует строку из одной переменной в другую.