程序在字符串列表中查找重复的字符串

时间:2018-11-17 15:49:51

标签: c string duplicates

我正在尝试编写一个比较用户输入的字符串的程序。我已经可以找到最长的字符串和“ 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)

0 个答案:

没有答案