两个字符串中不重复的相似字符的计数

标签 c string

我编写了一个 C 程序来找出两个字符串之间相似字符的数量。如果一个字符再次重复,则不应计算在内。

比如如果你输入

everest
every

输出应该是

3

因为“ever”这四个字母完全相同,但重复的“e”并不会增加计数。

对于输入

apothecary
panther

输出应该是 6,因为“apther”,不算第二个“a”。

我的代码看起来像是一个短流程的大块代码。我的代码是

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

int main()
{
   char firstString[100], secondString[100], similarChar[100], uniqueChar[100] = {0};
   fgets(firstString, 100, stdin);
   fgets(secondString, 100, stdin);
   int firstStringLength = strlen(firstString) - 1, secondStringLength = strlen(secondString) - 1, counter, counter1, count = 0, uniqueElem, uniqueCtr = 0;
   for(counter = 0; counter < firstStringLength; counter++) {
       for(counter1 = 0; counter1 < secondStringLength; counter1++) {
           if(firstString[counter] == secondString[counter1]){
               similarChar[count] = firstString[counter];
               count++;
               break;
           }
       }
   }
   for(counter = 0; counter < strlen(similarChar); counter++) {
       uniqueElem = 0;
       for(counter1 = 0; counter1 < counter; counter1++) {
          if(similarChar[counter] == uniqueChar[counter1]) {
              uniqueElem++;
          }
       }
       if(uniqueElem == 0) {
           uniqueChar[uniqueCtr++] = similarChar[counter];
       }
       }
   if(strlen(uniqueChar) > 1) {
    printf("%d\n", strlen(uniqueChar));
    printf("%s", uniqueChar);
   } else {
   printf("%d",0);
   }
}

有人可以给我一些建议或代码来缩短这个功能吗?

最佳答案

您应该有 2 个数组来记录每个 aplhabet 的出现次数。

int arrayCount1[26],arrayCount2[26];

遍历字符串并存储出现的地方。

现在计算相似字符数使用:

for( int i = 0 ; i < 26 ; i++ ){
   similarCharacters = similarCharacters + min( arrayCount1[26], arrayCount2[26] )
}

关于两个字符串中不重复的相似字符的计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48718084/

相关文章:

c - 是否可以在 C 中模拟对象/实例方法?

c - 何时忽略 byte_order 更改?

string - 用于替换文件夹中每个文件中字符串的所有实例的 Unix 命令

java - 有没有办法按行拆分 RDD?

java - 仅当它是一个独立的词时,如何替换关键短语?

c - Material 着色不起作用

c - 堆栈 eip 溢出 x86 与 x86_64 简单的 C 代码

c++ - 用于启用和禁用代码功能的 C 宏

java - 两个文本文件中的 "words"不同,并将它们加粗,在两个txt中显示在屏幕上。文件

正则表达式判断字符串是否包含 linux 文件路径或 linux 文件路径是否作为字符串的一部分