我编写了一个 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/