yueyufeng 发表于 2023-11-25 08:56:08

哪里不对

判断是不是含有26个英文字母的句子,不区分大小写
#include<stdio.h>
#include<string.h>
int main()
{
    char str,ch;
    int i,sum=0;
    while(gets(str))
    {
    int a=strlen(str);
    for(i=0;i<a;i++)
    {
      if(str>='A'&&str<='Z')
      {
         str=str+32;

      }
    }
      for(ch='a';ch<='z';ch++)
      {
            for(i=0;i<a;i++)
            {
                if(str==ch)
                {
                  sum++;
                  break;
                }
            }
      }
    if(sum==26)
   {
       printf("Yes\n");
   }
    else
    {
      printf("No\n");
    }
    }
    return 0;
}

FishC_GPT 发表于 2023-11-25 08:56:22

您的代码中有几个问题需要解决。

首先,在包含头文件部分,您应该包含`<stdio.h>`和`<string.h>`,而不是两个空的`<>`。

其次,在定义字符串变量`str`时,应该使用`char str`来定义一个字符数组,并且要保证`MAX_LENGTH`的值足够大以容纳输入的句子。

然后,在使用`gets()`函数获取输入句子时,应该使用`scanf("%[^\n]%*c", str);`来避免输入包含空格的问题,并且还需要在输入结束后加上一个空格字符以便后续处理。

最后,在比较字符是否为字母时,应该使用`isalpha()`函数而不是直接比较ASCII码。

下面是修改后的代码:

#include <stdio.h>
#include <string.h>
#include <ctype.h>

#define MAX_LENGTH 100

int main()
{
    char str;
    int i, sum = 0;
   
    printf("请输入一个句子:");
    scanf("%[^\n]%*c", str);
    strcat(str, " "); // 在句子末尾添加一个空格字符
   
    int len = strlen(str);
    for (i = 0; i < len; i++) {
      if (isalpha(str)) { // 判断字符是否为字母
            sum++;
      }
      if (sum == 26) { // 已经找到26个字母,可以停止循环
            break;
      }
    }
   
    if (sum == 26) {
      printf("该句子包含了26个英文字母。\n");
    } else {
      printf("该句子不包含26个英文字母。\n");
    }
   
    return 0;
}

请注意,上述代码假设输入的句子最长为100个字符(包括标点符号和空格),如果超出这个长度可能会导致程序出错。如果需要适应更长的句子,请根据实际情况调整`MAX_LENGTH`的值。
以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。

yueyufeng 发表于 2023-11-25 08:58:11

FishC_GPT 发表于 2023-11-25 08:56
您的代码中有几个问题需要解决。

首先,在包含头文件部分,您应该包含``和``,而不是两个空的``。

不用stype

FishC_GPT 发表于 2023-11-25 08:58:20

yueyufeng 发表于 2023-11-25 08:58
不用stype

如果不使用`gets()`或者`scanf()`来获取输入句子,可以使用`fgets()`函数来替代。`fgets()`函数可以读取带有空格的字符串,并且可以指定读取的最大字符数。下面是修改后的代码示例:

#include <stdio.h>
#include <ctype.h>
#include <string.h>

#define MAX_LENGTH 100

int main() {
    char str;
    int i, sum = 0;

    printf("请输入一个句子:");
    fgets(str, sizeof(str), stdin);
    str = '\0';// 去掉最后的换行符

    int len = strlen(str);
    for (i = 0; i < len; i++) {
      if (isalpha(str)) { // 判断字符是否为字母
            sum++;
      }
      if (sum == 26) { // 已经找到26个字母,可以停止循环
            break;
      }
    }

    if (sum == 26) {
      printf("该句子包含了26个英文字母。\n");
    } else {
      printf("该句子不包含26个英文字母。\n");
    }

    return 0;
}

使用`fgets()`函数读取一行输入,然后使用`strcspn()`函数去掉末尾的换行符。再进行后续的字符判断和计数操作。

请注意,`fgets()`函数会将换行符(`\n`)也作为字符串的一部分读入,因此在后续处理时需要注意将其排除。
以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。

yueyufeng 发表于 2023-11-25 08:59:27

FishC_GPT 发表于 2023-11-25 08:58
如果不使用`gets()`或者`scanf()`来获取输入句子,可以使用`fgets()`函数来替代。`fgets()`函数可以读取 ...

不用stype.h这个头文件,不用fgets

FishC_GPT 发表于 2023-11-25 08:59:38

yueyufeng 发表于 2023-11-25 08:59
不用stype.h这个头文件,不用fgets

如果不使用`stdio.h`中的`fgets`函数来获取输入句子,并且不使用其他读取字符串的方法(如`gets`),可以使用循环逐个读取字符并判断是否为换行符或结束符号来实现。下面是修改后的代码示例:

#include <stdio.h>
#include <ctype.h>

#define MAX_LENGTH 100

int main() {
    char str;
    int i, sum = 0;
   
    printf("请输入一个句子:");
   
    for (i = 0; i < MAX_LENGTH - 1; i++) {
      str = getchar();
      
      if (str == '\n' || str == EOF) {
            break;
      }
      
      if (isalpha(str)) {
            sum++;
      }
    }
   
    str = '\0';// 添加字符串结束符
   
    if (sum == 26) {
      printf("该句子包含了26个英文字母。\n");
    } else {
      printf("该句子不包含26个英文字母。\n");
    }
   
    return 0;
}

上述代码使用`getchar()`函数循环读取每个字符,直到遇到换行符`\n`或者文件结束符`EOF`。在读取过程中,判断字符是否为字母并进行计数操作。最后,添加字符串结束符`\0`来标志字符串的结尾。需要注意的是,这种方式无法处理输入超过`MAX_LENGTH`个字符的情况,所以请确保句子长度不会超过预设值。
以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。

yueyufeng 发表于 2023-11-25 09:00:30

yueyufeng 发表于 2023-11-25 08:59
不用stype.h这个头文件,不用fgets

不用ctype.h这个头文件,不用fgets

FishC_GPT 发表于 2023-11-25 09:00:44

yueyufeng 发表于 2023-11-25 09:00
不用ctype.h这个头文件,不用fgets

如果不使用`ctype.h`中的`isalpha`函数来判断字符是否为字母,并且不使用其他读取字符串的方法(如`fgets`),可以使用循环逐个读取字符并手动判断ASCII码范围来实现。下面是修改后的代码示例:#include #define MAX_LENGTH 100int main() {    char str;    int i, sum = 0;      printf("请输入一个句子:");      for (i = 0; i < MAX_LENGTH - 1; i++) {      str = getchar();                if (str == '\n' || str == EOF) {            break;      }                if ((str >= 'a' && str <= 'z') || (str >= 'A' && str <= 'Z')) {            sum++;      }    }      str = '\0';// 添加字符串结束符      if (sum == 26) {      printf("该句子包含了26个英文字母。\n");    } else {      printf("该句子不包含26个英文字母。\n");    }      return 0;}上述代码使用`getchar()`函数循环读取每个字符,直到遇到换行符`\n`或者文件结束符`EOF`。在读取过程中,通过手动判断字符的ASCII码范围来确定是否为字母,并进行计数操作。最后,添加字符串结束符`\0`来标志字符串的结尾。需要注意的是,这种方式无法处理输入超过`MAX_LENGTH`个字符的情况,所以请确保句子长度不会超过预设值。
以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。

额外减小 发表于 2023-11-25 09:48:07

你好,请问你的意图是要判断句子里面是否只有26个英文字母吗

sfqxx 发表于 2023-11-25 09:50:22

本帖最后由 sfqxx 于 2023-11-25 09:54 编辑

#include<stdio.h>
#include<string.h>
int main()
{
    char str,ch;
    int i,sum;
    while(gets(str))
    {
      sum = 0; //初始化
      int a=strlen(str);
      for(i=0;i<a;i++)
      {
            if(str>='A'&&str<='Z')
            {
                str=str+32;
            }
      }
      for(ch='a';ch<='z';ch++)
      {
            for(i=0;i<a;i++)
            {
                if(str==ch)
                {
                  sum++;
                  break;
                }
            }
      }
      if(sum==26)
      {
            printf("Yes\n");
      }
      else
      {
            printf("No\n");
      }
    }
    return 0;
}

这个行吗?
页: [1]
查看完整版本: 哪里不对