【发布时间】:2022-01-23 12:42:04
【问题描述】:
我需要创建一个二维字符串数组并输入 hi,最多 10 个单词,而不是检查这些单词是否是 pangram。
如果单词是 pangram,程序需要停止接收单词。
例如:
the
five
boxing
wizards
jump
quickly
It's a pangram?
Yes
但它并没有停止,而是一直询问单词直到它达到 10。还说非 pangram 句子是 pangram。
#include<stdio.h>
#include <string.h>
#define ROWS 10
#define COL 50
#define NUM_OF_LETTERS 26
int main()
{
char words[ROWS][COL] = {0};
char used []['z' - 'a' + 1] = {0};
int i = 0;
int j=0;
int count = 0;
printf("Enter up to 10 words try to make a pangram\n");
while(i<ROW&& count < NUM_OF_LETTERS)
{
fgets(words[i], ROW, stdin);
words[i][strcspn(words[i], "\n")] = 0;
int len = strlen(words[i]);
for(j=0;j<COL;j++)
{
if(strcmp(words[j] ,used[j]) == 0)
{
count++;
}
}
i++;
}
printf("It's a pangram?\n");
if (count >= NUM_OF_LETTERS)
{
printf("Yes!\n");
}
else
{
printf("No\n");
}
return 0;
}
而且我不能使用指针。
【问题讨论】:
-
供将来参考,我们知道它不起作用;如果它正常运行而您仍然将其发布在此处,那就太奇怪了。相反,您应该包括in your question,它 正在 做什么,以及它与您的期望有何不同(这也应该包含在您的问题中),以及您迄今为止所做的任何努力到目前为止调试您的程序。我立刻看到了一个巨大的问题。
words[][COL] = {0}声明了一个 1xCOL 数组数组,因此,一旦您索引超过words[0],您就会调用未定义的行为(例如,i >= 1 是 UB)。 -
您检查输入是否是程序需要在输入循环内,而不是在它之后。或者它需要在两个地方,以防你填写单词列表。所以你需要使用函数来避免代码复制。
-
我试过你说的但它只是计算字母,它需要检查字母的所有字符是否都在字符串中。那是我做不到的
标签: arrays c string multidimensional-array pangram