我有两个字符串,我想知道它们是否彼此相等。然而,字符串字符顺序已被随机化。另外某些字符可能已通过通配符运算符(*)换出。我正在使用它来进行Anagram检测。比较字符串与通配符运算符(*)和随机顺序 - Anagrams
在这种情况下,我试图得到anagram程序,我不得不说ab **是abba的一个字谜。现在它可以告诉它是否是一个字谜,如果它实际上是一个像abba和bbaa这样的字谜。现在我想弄清楚如何实现通配符*,我不知道从哪里开始,请帮助!
我有什么至今:
#include <stdlib.h>
#include <stdio.h>
#include <stdbool.h>
#define SIZE 5
bool areAnagram(char *str1, char *str2)
{
int count[SIZE] = {0};
int i = 0;
for (i = 0; str1[i] && str2[i]; i++)
{
count[str1[i]]++;
count[str2[i]]--;
}
if (str1[i] || str2[i])
{
return false;
}
for (i = 0; i < SIZE; i++)
{
if (count[i])
{
return false;
}
}
return true;
}
int main()
{
char str1[SIZE], str2[SIZE];
FILE *finput;
finput = fopen("input.txt", "r");
fscanf(finput, "%s %s", str1, str2);
printf("%s\n", str1);
printf("%s\n", str2);
if(areAnagram(str1, str2))
{
printf("THEY ARE ANAGRAMS\n");
}
else
{
printf("THEY AREN'T ANAGRAMS\n");
}
}
@TessellatingHeckler abba和bbaa是anagrams,它是input.txt设置为 – Vcoss
哦,现在我明白你的意思了。雅是多数民众赞成破碎的代码哎呀brb – Vcoss
'abaa''baba'''他们是ANAGRAMS' - 不,他们仍然不是?你正在初始化count [SIZE]一个5元素数组,索引0,1,2,3,4。然后你用'count [str1 [i]]索引它 - str1是一个字符数组,所以字母“a”将是ASCII字符数97,所以你正在执行'count [97]'的数组变为0-4。我想你正在咀嚼随机未分配的记忆。然后你试着在'count [i]'五个地方寻找结果。如果你数数足够大并改变计数器,这种方法可能会奏效,但现在它已经基本上被打破了。 – TessellatingHeckler