字符串检查字母字母与c pangram中的选项卡

问题描述 投票:0回答:2

我写了这段代码,但我有点问题。这段代码应该得到一个字符串,并检查这个字符串是否包含所有字母...如果它不输出是“不是一个pangramma!”。如果是“PanGramma!”。探索是我想要计算单词之间空格的数量。但是当输入是至少有一个空格的字符串时,输出将始终为“Not a PanGramma!”,即使它包含所有字母。有人可以帮帮我吗?

    #include <stdio.h>
    char UpCase (char c);
    int isPangram (char *str);

    int main()
    {
      char str[100];
      printf("Please enter yout string: \n");
      scanf("%s", str);
      if (isPangram (str) == 1)
      {
        printf("PanGramma!\n");
      }
      else
      {
        printf("Not a PanGramma!\n");
      }

        return 0;
    }
    char UpCase (char c)
    {
      if (c>='a' && c<='z')
      {
        return c-'a'+'A';
      }
    return c;
    }
    int isPangram (char *str)
    {
     int i=0;
     int hist[27]={0};
     while (str[i] !=0)
     {
       str[i]=UpCase(str[i]);
       if (str[i] == ' ')
       {
          hist[26]++;
       }
       else
       {
          hist[str[i] - 'A']++;
       }
       i++;
     }
     for (i=0; i<26; i++)
     {
       if(hist[i] == 0)
       {
          return 0;
       }
     }
     return 1;
    }
c string
2个回答
0
投票

你的问题来自scanf函数的使用:它会在它捕获的每个空白处停止。

来自man scanf

%S

匹配一系列非空白字符;下一个指针必须是指向字符数组的指针,该指针足够长以容纳输入序列和终止空字节('\ 0'),这是自动添加的。输入字符串在空白处或最大字段宽度处停止,以先发生者为准。

要使程序正常工作,可以使用fgets函数:

int main()
{
  char str[100];
  printf("Please enter yout string: \n");

  fgets(str, sizeof str, stdin);

  if (isPangram (str) == 1)
  {
    printf("PanGramma!\n");
  }
  else
  {
    printf("Not a PanGramma!\n");
  }

  return 0;
}

如果你想了解更多有关scanf函数的信息,你可以阅读A beginners' guide away from scanf()。它还会告诉您为什么scanf可能会导致代码中的缓冲区溢出。


0
投票

感谢你们!我用过这个scanf(“%[^ \ n]%* c”,str);再次感谢您的帮助!

© www.soinside.com 2019 - 2024. All rights reserved.