【发布时间】:2017-02-22 06:07:36
【问题描述】:
我有两个字符串,我想知道它们是否相等。然而,字符串的字符顺序是随机的。此外,某些字符可能已被通配符 (*) 替换。我正在使用它进行 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 是字谜,这是 input.txt 设置的内容
-
哦,现在我知道你的意思了。是的,这是一个损坏的代码,哎呀 brb
-
abaababa-THEY ARE ANAGRAMS- 不,他们还没有?您正在初始化count[SIZE]一个 5 元素数组,索引为 0、1、2、3、4。然后你用count[str1[i]]对其进行索引——str1 是一个字符数组,所以字母a将是ASCII 字符号97,所以你正在做一个0-4 的数组的count[97]。我认为您正在咀嚼随机未分配的内存。然后你尝试在count[i]的五个地方寻找结果。如果您将计数设置得足够大并更改了计数器,这种方法可能会奏效,但现在它从根本上被打破了。
标签: c