首页 > 解决方案 > 程序在字符串列表中查找重复字符串

问题描述

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

标签: cstringduplicates

解决方案


推荐阅读