我差不多完成了我的anagram求解器程序,我输入了两个字符串,得到的结果是它们是否是彼此的字谜。对于这个例子,我使用'收到付款'和'每分钱付给我'。
我得到的问题是当我输出letterCount数组时,letterCount1不正确(它不认为有一个字符'd'但是有。)但是letterCount2是正确的。
任何人都可以看到这个问题因为我完全感到困惑吗?
#include <stdio.h>
#include <string.h>
int checkAnagram(char string1[], char string2[])
{
int i;
int count = 0, count2 = 0;
int letterCount1[26] = {0};
int letterCount2[26] = {0};
for(i = 0; i < strlen(string1); i++)
{
if(!isspace(string1[i]))
{
string1[i] = tolower(string1[i]);
count++;
}
}
for(i = 0; i < strlen(string2); i++)
{
if(!isspace(string2[i]))
{
string2[i] = tolower(string2[i]);
count2++;
}
}
if(count == count2)
{
for(i = 0; i < count; i++)
{
if(string1[i] >='a' && string1[i] <= 'z')
{
letterCount1[string1[i] - 'a'] ++;
}
if(string2[i] >='a' && string2[i] <= 'z')
{
letterCount2[string2[i] - 'a'] ++;
}
}
printf("%s\n", string1);
for(i = 0; i < 26; i++)
{
printf("%d ", letterCount1[i]);
printf("%d ", letterCount2[i]);
}
}
}
main()
{
char string1[100];
char string2[100];
gets(string1);
gets(string2);
if(checkAnagram(string1, string2) == 1)
{
printf("%s", "Yes");
} else
{
printf("%s", "No");
}
}
答案 0 :(得分:1)
那是因为你的计数包含非空格字符的数量,但你保留字符串的空格。
例如,字符串“hello world”有11个字符,但是如果你通过循环运行它,你的计数将是10(你不计算空间)。但是,当您稍后查看字符串并计算每个字母的外观时,您将查看前10个字符,因此完全忽略了最后一个字符 - “d”。
要解决此问题,您需要查看字符串的所有字符,并且只计算字母数字字符。
答案 1 :(得分:0)
我为你修好了:
#include <stdio.h>
#include <string.h>
int checkAnagram(char string1[], char string2[])
{
int i;
int count = 0, count2 = 0;
int letterCount1[26] = {0};
int letterCount2[26] = {0};
int len1 = strlen(string1);
int len2 = strlen(string2);
for(i = 0; i < len1; i++)
{
if(!isspace(string1[i]))
{
string1[i] = tolower(string1[i]);
count++;
}
}
for(i = 0; i < len2; i++)
{
if(!isspace(string2[i]))
{
string2[i] = tolower(string2[i]);
count2++;
}
}
if(count == count2)
{
for (i=0; i<len1; i++)
if (!isspace(string1[i]))
letterCount1[string1[i]-'a']++;
for (i=0; i<len2; i++)
if (!isspace(string2[i]))
letterCount2[string2[i]-'a']++;
int flag = 1;
for(i = 0; flag && i < 26; i++)
if (letterCount1[i] != letterCount2[i])
flag = 0;
return flag;
}
return 0;
}
main()
{
char string1[100];
char string2[100];
gets(string1);
gets(string2);
if(checkAnagram(string1, string2) == 1)
{
printf("%s", "Yes");
} else
{
printf("%s", "No");
}
}
首先,不要在循环内计算字符串的长度。我将它们提取到len1
和len2
变量中。
其次,你的循环错了!你不应该达到count
,你应该达到那个字符串的长度。
第三,你没有从checkAnagram
函数返回任何内容。