检查数组中的所有元素是否为零

时间:2016-04-07 02:31:05

标签: c

我无法确定输入的两个单词是否为字谜。

#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,并且只要一个元素不为零就让它递增,我可以让任何大于零的和不是一个字谜。但是,它总是为我打印出字谜。

2 个答案:

答案 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");
}

查看标有// <---的所有地点。