Я пытаюсь написать программу, которая сравнивает строки, введенные пользователем.Я уже могу найти самую длинную строку и "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)