鱼C论坛

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

哪里不对

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

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

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

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

        }
    }
        for(ch='a';ch<='z';ch++)
        {
            for(i=0;i<a;i++)
            {
                if(str[i]==ch)
                {
                    sum++;
                    break;
                }
            }
        }
    if(sum==26)
     {
       printf("Yes\n");
     }
    else
    {
        printf("No\n");
    }
    }
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> 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码。

下面是修改后的代码:
#include <stdio.h>#include <string.h>#include <ctype.h>#define MAX_LENGTH 100int main(){    char str[MAX_LENGTH+1];    int i, sum = 0;        printf("请输入一个句子:");    scanf("%[^\n]%*c", str);    strcat(str, " "); // 在句子末尾添加一个空格字符        int len = strlen(str);    for (i = 0; i < len; i++) {        if (isalpha(str[i])) { // 判断字符是否为字母            sum++;        }        if (sum == 26) { // 已经找到26个字母,可以停止循环            break;        }    }        if (sum == 26) {        printf("该句子包含了26个英文字母。\n");    } else {        printf("该句子不包含26个英文字母。\n");    }        return 0;}
请注意,上述代码假设输入的句子最长为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()`函数可以读取带有空格的字符串,并且可以指定读取的最大字符数。下面是修改后的代码示例:
#include <stdio.h>#include <ctype.h>#include <string.h>#define MAX_LENGTH 100int main() {    char str[MAX_LENGTH];    int i, sum = 0;    printf("请输入一个句子:");    fgets(str, sizeof(str), stdin);    str[strcspn(str, "\n")] = '\0';  // 去掉最后的换行符    int len = strlen(str);    for (i = 0; i < len; i++) {        if (isalpha(str[i])) { // 判断字符是否为字母            sum++;        }        if (sum == 26) { // 已经找到26个字母,可以停止循环            break;        }    }    if (sum == 26) {        printf("该句子包含了26个英文字母。\n");    } else {        printf("该句子不包含26个英文字母。\n");    }    return 0;}
使用`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`),可以使用循环逐个读取字符并判断是否为换行符或结束符号来实现。下面是修改后的代码示例:
#include <stdio.h>#include <ctype.h>#define MAX_LENGTH 100int main() {    char str[MAX_LENGTH];    int i, sum = 0;        printf("请输入一个句子:");        for (i = 0; i < MAX_LENGTH - 1; i++) {        str[i] = getchar();                if (str[i] == '\n' || str[i] == EOF) {            break;        }                if (isalpha(str[i])) {            sum++;        }    }        str[i] = '\0';  // 添加字符串结束符        if (sum == 26) {        printf("该句子包含了26个英文字母。\n");    } else {        printf("该句子不包含26个英文字母。\n");    }        return 0;}
上述代码使用`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[i] = getchar();                if (str[i] == '\n' || str[i] == EOF) {            break;        }                if ((str[i] >= 'a' && str[i] <= 'z') || (str[i] >= 'A' && str[i] <= 'Z')) {            sum++;        }    }        str[i] = '\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 编辑
#include<stdio.h>
#include<string.h>
int main()
{
    char str[10000],ch;
    int i,sum;
    while(gets(str))
    {
        sum = 0; //初始化
        int a=strlen(str);
        for(i=0;i<a;i++)
        {
            if(str[i]>='A'&&str[i]<='Z')
            {
                str[i]=str[i]+32;
            }
        }
        for(ch='a';ch<='z';ch++)
        {
            for(i=0;i<a;i++)
            {
                if(str[i]==ch)
                {
                    sum++;
                    break;
                }
            }
        }
        if(sum==26)
        {
            printf("Yes\n");
        }
        else
        {
            printf("No\n");
        }
    }
    return 0;
}

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-10-5 07:16

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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