鱼C论坛

 找回密码
 立即注册
查看: 810|回复: 9

哪里不对

[复制链接]
发表于 2023-11-25 08:56:08 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
判断是不是含有26个英文字母的句子,不区分大小写
  1. #include<stdio.h>
  2. #include<string.h>
  3. int main()
  4. {
  5.     char str[10000],ch;
  6.     int i,sum=0;
  7.     while(gets(str))
  8.     {
  9.     int a=strlen(str);
  10.     for(i=0;i<a;i++)
  11.     {
  12.         if(str[i]>='A'&&str[i]<='Z')
  13.         {
  14.            str[i]=str[i]+32;

  15.         }
  16.     }
  17.         for(ch='a';ch<='z';ch++)
  18.         {
  19.             for(i=0;i<a;i++)
  20.             {
  21.                 if(str[i]==ch)
  22.                 {
  23.                     sum++;
  24.                     break;
  25.                 }
  26.             }
  27.         }
  28.     if(sum==26)
  29.      {
  30.        printf("Yes\n");
  31.      }
  32.     else
  33.     {
  34.         printf("No\n");
  35.     }
  36.     }
  37.     return 0;
  38. }
复制代码

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-11-25 08:56:22 | 显示全部楼层
您的代码中有几个问题需要解决。

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

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

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

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

下面是修改后的代码:
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <ctype.h>
  4. #define MAX_LENGTH 100
  5. int main()
  6. {
  7.     char str[MAX_LENGTH+1];
  8.     int i, sum = 0;
  9.    
  10.     printf("请输入一个句子:");
  11.     scanf("%[^\n]%*c", str);
  12.     strcat(str, " "); // 在句子末尾添加一个空格字符
  13.    
  14.     int len = strlen(str);
  15.     for (i = 0; i < len; i++) {
  16.         if (isalpha(str[i])) { // 判断字符是否为字母
  17.             sum++;
  18.         }
  19.         if (sum == 26) { // 已经找到26个字母,可以停止循环
  20.             break;
  21.         }
  22.     }
  23.    
  24.     if (sum == 26) {
  25.         printf("该句子包含了26个英文字母。\n");
  26.     } else {
  27.         printf("该句子不包含26个英文字母。\n");
  28.     }
  29.    
  30.     return 0;
  31. }
复制代码

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

使用道具 举报

 楼主| 发表于 2023-11-25 08:58:11 | 显示全部楼层
FishC_GPT 发表于 2023-11-25 08:56
您的代码中有几个问题需要解决。

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

不用stype
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-11-25 08:58:20 | 显示全部楼层

如果不使用`gets()`或者`scanf()`来获取输入句子,可以使用`fgets()`函数来替代。`fgets()`函数可以读取带有空格的字符串,并且可以指定读取的最大字符数。下面是修改后的代码示例:
  1. #include <stdio.h>
  2. #include <ctype.h>
  3. #include <string.h>
  4. #define MAX_LENGTH 100
  5. int main() {
  6.     char str[MAX_LENGTH];
  7.     int i, sum = 0;
  8.     printf("请输入一个句子:");
  9.     fgets(str, sizeof(str), stdin);
  10.     str[strcspn(str, "\n")] = '\0';  // 去掉最后的换行符
  11.     int len = strlen(str);
  12.     for (i = 0; i < len; i++) {
  13.         if (isalpha(str[i])) { // 判断字符是否为字母
  14.             sum++;
  15.         }
  16.         if (sum == 26) { // 已经找到26个字母,可以停止循环
  17.             break;
  18.         }
  19.     }
  20.     if (sum == 26) {
  21.         printf("该句子包含了26个英文字母。\n");
  22.     } else {
  23.         printf("该句子不包含26个英文字母。\n");
  24.     }
  25.     return 0;
  26. }
复制代码

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

请注意,`fgets()`函数会将换行符(`\n`)也作为字符串的一部分读入,因此在后续处理时需要注意将其排除。
以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

不用stype.h这个头文件,不用fgets
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-11-25 08:59:38 | 显示全部楼层
yueyufeng 发表于 2023-11-25 08:59
不用stype.h这个头文件,不用fgets

如果不使用`stdio.h`中的`fgets`函数来获取输入句子,并且不使用其他读取字符串的方法(如`gets`),可以使用循环逐个读取字符并判断是否为换行符或结束符号来实现。下面是修改后的代码示例:
  1. #include <stdio.h>
  2. #include <ctype.h>
  3. #define MAX_LENGTH 100
  4. int main() {
  5.     char str[MAX_LENGTH];
  6.     int i, sum = 0;
  7.    
  8.     printf("请输入一个句子:");
  9.    
  10.     for (i = 0; i < MAX_LENGTH - 1; i++) {
  11.         str[i] = getchar();
  12.         
  13.         if (str[i] == '\n' || str[i] == EOF) {
  14.             break;
  15.         }
  16.         
  17.         if (isalpha(str[i])) {
  18.             sum++;
  19.         }
  20.     }
  21.    
  22.     str[i] = '\0';  // 添加字符串结束符
  23.    
  24.     if (sum == 26) {
  25.         printf("该句子包含了26个英文字母。\n");
  26.     } else {
  27.         printf("该句子不包含26个英文字母。\n");
  28.     }
  29.    
  30.     return 0;
  31. }
复制代码

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

使用道具 举报

 楼主| 发表于 2023-11-25 09:00:30 | 显示全部楼层
yueyufeng 发表于 2023-11-25 08:59
不用stype.h这个头文件,不用fgets

不用ctype.h这个头文件,不用fgets
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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[MAX_LENGTH];    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官方接口),如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-11-25 09:48:07 | 显示全部楼层
你好,请问你的意图是要判断句子里面是否只有26个英文字母吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-11-25 09:50:22 | 显示全部楼层
本帖最后由 sfqxx 于 2023-11-25 09:54 编辑
  1. #include<stdio.h>
  2. #include<string.h>
  3. int main()
  4. {
  5.     char str[10000],ch;
  6.     int i,sum;
  7.     while(gets(str))
  8.     {
  9.         sum = 0; //初始化
  10.         int a=strlen(str);
  11.         for(i=0;i<a;i++)
  12.         {
  13.             if(str[i]>='A'&&str[i]<='Z')
  14.             {
  15.                 str[i]=str[i]+32;
  16.             }
  17.         }
  18.         for(ch='a';ch<='z';ch++)
  19.         {
  20.             for(i=0;i<a;i++)
  21.             {
  22.                 if(str[i]==ch)
  23.                 {
  24.                     sum++;
  25.                     break;
  26.                 }
  27.             }
  28.         }
  29.         if(sum==26)
  30.         {
  31.             printf("Yes\n");
  32.         }
  33.         else
  34.         {
  35.             printf("No\n");
  36.         }
  37.     }
  38.     return 0;
  39. }
复制代码


这个行吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-21 12:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表