【问题标题】:How to find duplicate letter in array in C如何在C中的数组中查找重复的字母
【发布时间】:2021-10-04 02:32:52
【问题描述】:

我正在制作一个程序,它要求用户输入一个参数 (argv[1]),其中参数是重新排列的字母表中的每个字母,但用户喜欢它。有效输入的示例是“YTNSHKVEFXRBAUQZCLWDMIPGJO”和“JTREKYAVOGDXPSNCUIZLFBMWHQ”。无效输入的示例将是“VCHPRZGJVTLSKFBDQWAXEUYMOI”和“ABCDEFGHIJKLMNOPQRSTUYYYYY”,因为在各自的示例中存在重复的“V”和“Y”。

到目前为止我所知道的是,您可以像下面这样遍历整个参数

for (int j = 0, n = strlen(argv[1]); j < n; j++)
{
   //Place something in here...
}

但是,我不太清楚这是否是查找重复项时的正确方法?此外,我希望答案尽可能简单,正确知道时间和 cpu 使用率不是优先事项,因此“最佳”算法不一定是我要寻找的算法。

【问题讨论】:

  • 您最终需要检查输入的每个字符,因此循环遍历它们是一个好的开始。
  • 如果有人递给你一张写有上述字符序列的纸,而你只有另一张纸和一支铅笔,你会怎么做?回答这个问题,您将拥有一种(几种)可能的算法。
  • 我认为最简单的选择是使用 switch(arg[i]) { case 'A': int x++;休息;依此类推。
  • n = strlen(argv[1] 不起作用。n=0.

标签: arrays c duplicates


【解决方案1】:

假设你所有的字母都是大写字母,你可以使用哈希表使这个算法在O(n)时间复杂度下工作。

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

int main(int argc, char** argv){
    int arr[50]={};

    for (int j = 0, n = strlen(argv[1]); j < n; j++)
    {
        arr[argv[1][j]-'A']++;
    }

    printf("duplicate letters: ");
    for(int i=0;i<'Z'-'A'+1;i++){
        if(arr[i]>=2)printf("%c ",i+'A');
    }
}

在这里,我们将数组arr 初始化为零。该数组将记录每个字母的出现次数。 然后我们寻找出现 2 次或更多次的字母,这些字母是重复的字母。
同样使用同一个数组,您可以检查所有字母是否至少出现一次以检查它是否是排列

【讨论】:

    【解决方案2】:

    试试看。

    #include <stdio.h>
    #include <stddef.h>
    
    int main()
    {
        char * input = "ABCC";
        size_t ascii[256] = {0, };
        char * cursor = input;
        char c = '\0';
        while((c=*cursor++))
        {
            if(ascii[c] == 0)
                ++ascii[c];
            else
            {
                printf("Find %c has existed.\n", c);
                break;
            }
        }
    
        return 0;
    }
    

    【讨论】:

      【解决方案3】:

      我不知道这是否是您正在寻找的代码类型,但这就是我所做的。它在给定的字符串集中查找重复项。

      #include <stdio.h>
      #include <stdlib.h>
      #define max 50
      
      int main() {
         char stringArg[max];
           int dupliCount = 0;
            
            printf("Enter A string: ");
                scanf("%s",stringArg);
                     system("cls");
      
              int length = strlen(stringArg);
      for(int i=0; i<length; i++){
          for(int j=i+1; j<length; j++){
              if(stringArg[i] == stringArg[j]){
                  dupliCount +=1;
              }
          }
      }
      if(dupliCount > 0)
            printf("Invalid Input");
      printf("Valid Input");    
      }
      

      【讨论】:

        猜你喜欢
        • 2021-06-28
        • 2015-06-14
        • 2019-11-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-02-22
        • 1970-01-01
        相关资源
        最近更新 更多