我无法确定输入的两个单词是否为字谜。
#include <stdio.h>
#include <string.h>
int main() {
char ch;
int letter_count[26] = {0};
int i;
int sum = 0;
printf("Enter first word: ");
do
{
scanf("%c", &ch);
letter_count[ch - 'a']++;
} while (ch != '\n');
for(i = 0; i < 26; i++)
printf("%d ", letter_count[i]);
printf("\n");
printf("Enter second word: ");
do
{
scanf("%c", &ch);
letter_count[ch - 'a']--;
} while (ch != '\n');
for(i = 0; i < 26; i++)
printf("%d ", letter_count[i]);
for(i = 0; i < 26; i++)
if(letter_count[ch] != 0)
sum++;
if (sum == 0)
printf("anagrams");
else
printf("not anagrams");
}
我必须使用do while部分代码。我可以输入这两个单词,然后打印出数组中的元素,这样“Mattress”和“Smartest”一起将所有元素都归零。但是,我在最后一部分遇到了麻烦,即使用第三个循环来检查所有元素是否为零。
我想我可以事先声明一个int,并且只要一个元素不为零就让它递增,我可以让任何大于零的和不是一个字谜。但是,它总是为我打印出字谜。
答案 0 :(得分:1)
在第三个循环中,使用letter_count[ch]
不会检查整个数组。您应该使用循环变量i
遍历数组。代码的那部分应该是:
for (i=0; i<26; i++)
if (letter_count[i] != 0)
sum++;
答案 1 :(得分:0)
要同时处理大写字母和小写字母,请使用topper()
中的to lower()
或<ctype.h>
以避免越界访问。
#include <stdio.h>
#include <string.h>
#include <ctype.h> // <---
int main() {
char ch;
int letter_count[26] = {0};
int i;
_Bool bad = 0;
printf("Enter first word: ");
do
{
scanf("%c", &ch);
if(!isalpha(ch)) // <---
{
puts("Not a letter");
continue;
}
letter_count[tolower(ch) - 'a']++; // <---
} while (ch != '\n');
for(i = 0; i < 26; i++)
printf("%d ", letter_count[i]);
printf("\n");
printf("Enter second word: ");
do
{
scanf("%c", &ch);
if(!isalpha(ch)) // <---
{
puts("Not a letter");
continue;
}
letter_count[tolower(ch) - 'a']--; // <---
} while (ch != '\n');
for(i = 0; i < 26; i++)
printf("%d ", letter_count[i]);
printf("\n"); // <---
for(i = 0; i < 26; i++)
if(letter_count[i] != 0)
{
bad = 1;
break; // <---
}
if (bad == 0)
printf("anagrams");
else
printf("not anagrams");
}
查看标有// <---
的所有地点。