我的计划工作正常,这只是我需要的一个小建议;首先,我的代码检查两个单词是否是字谜;它工作正常;
#include <stdio.h>
int anagram_check(char [], char []);
int main()
{
char word1[100], word2[100];
int check;
printf("Enter a Word\n");
gets(word1);
printf("Enter another word\n");
gets(word2);
check = anagram_check(word1, word2);
if (check == 1)
printf("\"%s\" and \"%s\" are anagrams.\n", word1, word2);
else
printf("\"%s\" and \"%s\" are not anagrams.\n", word1, word2);
return 0;
}
int anagram_check(char word1[], char word2[])
{
int first[26] = {0}, second[26] = {0}, i = 0;
while (word1[i] != 0)
{
first[word1[i]-'a']++;
i++;
}
i = 0;
while (word2[i] != 0)
{
second[word2[i]-'a']++;
i++;
}
for (i = 0; i < 26; i++)
{
if (first[i] != second[i])
return 0;
}
return 1;
}
现在我的问题是如何让我的程序将大写字母视为小写字母? 例如。当我输入你好和你好时,它说的话不是字谜。那么我怎么能改变这个呢。
它也说&#34;秒[word2 [i] - &#39; a&#39;] ++;&#34; &#39; a&#39;是什么?代表/或做什么?
我还要求忽略任何不是字母的字符,这已经是我的程序正确的情况了吗?
谢谢,感谢任何帮助!!
答案 0 :(得分:2)
首先,从您的问题中删除c ++标记。 c和c ++不一样。你正在写c。
另外,如果你想知道为什么你会被投票,人们有点苛刻,请让我解释一下。对于那些在没有首先表明他们已经努力解决问题的情况下提出问题的人来说,这个网站通常不友好。我们并不是想要意味着。像这样的问题被推翻以阻止更像这种弹出。我们不是在这里舀勺。
我建议编写一个小函数,将一个字符转换为小写,然后在这些循环中调用它。有tolower函数,但我认为编写自己的函数是一个很好的练习。
while (word1[i] != 0)
{
//you should call your function here
first[word1[i]-'a']++;
i++;
}
//....
while (word2[i] != 0)
{
//you should call your function here.
second[word2[i]-'a']++;
i++;
}
我不再具体了,因为这听起来像是一个家庭作业问题。
“也说”第二个[word2 [i] - 'a'] ++;“'a'代表什么/或做什么?” 这里的'a'代表字母a的ascii code。 C编译器将'a'视为常数97。
对于处理非字母数字字符时会发生什么,您应该稍微思考一下。我将在评论中与您讨论。提示:在这两个循环之一中会发生一些不好的事情:
while (word1[i] != 0)
{
first[word1[i]-'a']++;
i++;
}
//...
while (word2[i] != 0)
{
second[word2[i]-'a']++;
i++;
}