Программа поиска дублирующихся строк в списке строк - PullRequest
0 голосов
/ 17 ноября 2018

Я пытаюсь написать программу, которая сравнивает строки, введенные пользователем.Я уже могу найти самую длинную строку и "max" (самый большой код ASCII для первого неравного символа), но я не могу понять, как найти первый экземпляр дублирующейся строки из списка.Вот мой код:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
        char words[50], max[50], longest[50], dupe[50];
        int n, c, x, dupepos;
        dupe[0] = '\0';
        max[0] = '\0';
        longest[0] = '\0';
        scanf("%d", &n);
        for(c = 0; c <= n; c++) {
                fgets(words, 50, stdin);
                x = strcmp(max, words);
                if(strlen(words) > strlen(longest)) strcpy(longest, words);
                if(x < 0) strcpy(max, words);
        }
        printf("Longest: %s", longest);
        printf("Max: %s", max);
//      if(dupe == 0) printf("UNIQUE (no dupes)\n");
//      else printf("First dupe found at position %d: %s\n", dupepos, dupe);
        return 0;
}

Я прокомментировал оператор if для отображения дубликата, так как в настоящее время он не будет работать.Я могу сделать эту же программу для целых чисел, используя массив, такой как:

for(int c = 0; c < n; c++) {
    scanf("%d", &num);
    unique[num]++;
    if(unique[num] > 1 && dupe == 0) dupe = num;
}

Я бы хотел сделать то же самое со списком строк.Если есть более простой способ выполнить мою задачу, который приветствуется!

Если тестовый файл выглядит так:

7
The first line
fun
let x be 19
8 > 3
bracket
fun
Turkey

Он должен вывести это:

Longest: The first line
Max: let x be 19
First dupe found at position 6: fun

Если тестовый файл выглядел так:

5
The first line
let x be 19
8 > 3
{bracket}
turkey

Он должен вывести это:

Longest: The first line
Max: {bracket}
UNIQUE (no dupes)
...