我试图将这个小代码分成函数,但是我遇到了麻烦,代码应该显示这些单词是否为字谜。如果我把所有东西都放到主要部分,那就完美了,但是现在我把它吐成了函数,它表明所有的单词都不是字谜。
我认为问题出在getWords函数中,在它得到单词的循环中。你们可能会知道我搞砸了。提前致谢。 :)
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
void getWords(char *first,char *second,int *alphabet)
{
int i = 0, sum = 0;
printf("Enter the first word: ");
do
{
//I think the problem is somewhere under here
first[i] = getchar();
if(isalpha(first[i]))
alphabet[toupper(first[i]) - 'A'] += 1 ;
i++;
}while(first[i - 1] != '\n');
printf("Enter the second word: ");
i = 0;
do
{
//and here
second[i] = getchar();
if(isalpha(second[i]))
{
alphabet[toupper(second[i]) - 'A'] -= 1;
}
i++;
}while(second[i - 1] != '\n');
}
void checksForAnagrams(int sum, int alphabet[26])
{
int i;
for(i = 0; i <= 26 - 1; i++)
{
sum += alphabet[i];
}
if (sum == 0)
printf("Anagrams\n");
if (sum != 0)
printf("Not anagrams\n");
}
int main()
{
int alphabet[26] = {0}, sum = 0;
char first[20], second[20];
getWords(&first[20], &second[20], &alphabet[26]);
checksForAnagrams(sum, &alphabet[26]);
return 0;
}
答案 0 :(得分:0)
char *first = &first[20];
现在first
指向数组的最后一个+ 1元素,而不是你要修复的那个元素。数组first
的有效索引是0 - 19
getWords(first, second, alphabet);