鱼C论坛

 找回密码
 立即注册
查看: 148|回复: 11

[已解决]判断

[复制链接]
发表于 2024-10-27 20:08:12 | 显示全部楼层 |阅读模式

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

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

x
题目:
本题要求你做一个简单的自动问答机,对任何一个问句,只要其中包含 PTA 就
回答 Yes!,其他一概回答 No.。
输入格式:
输入第一行给出一个整型范围内的正整数 N,随后 N 行,每行给出一个长度不
超过 80 的字符串,为用户输入的句子,由英文字母、数字、空格和标点符号组
成,以回车结束。
输出格式:
对每一行句子,如果其结尾字符为问号 ? 则判断此句中有无 PTA?如果有则在
一行中输出 Yes!,否则输出 No.。如果不是问号结尾,则敷衍地回答 enen。
输入样例:
5
Hello!
Do you still play WZRY?
Chi Ji?
you play PTA ah?
how about pta site?
输出样例
enen
No.
No.
Yes!
No.
解:
#include<stdio.h>
#include<string.h>
int main()
{
        int n,i,count,x,len,y;
        scanf("%d",&n);
        char arr[n][100],arr1[100];
        for(i=0;i<n;i++)
        {
                fgets(arr[i],sizeof(arr[i]),stdin);
                arr1[i]=strlen(arr[i])-1;
        }
        for(i=0;i<n;i++)
        {
                count=0;
                        if(arr[i][arr1[i]]!='?')
                {
                        printf("enen\n");
                }
                else if(arr[i][arr1[i]]=='?')
                {
                        for(x=0;x<arr1[i];x++)
                        {
                                if(arr[i][x]=='P'||'T'||'A')
                                {
                                        count++;
                                }
                        }
                        if(count==3)
                                {
                                        printf("Yes!\n");
                                }
                                else
                                {
                                        printf("No.\n");
                                }
                }
        }
       
        return 0;
}
有什么问题?
最佳答案
2024-10-28 20:53:38
dinghuang 发表于 2024-10-28 20:50
jackz007 发表于 2024-10-27 21:34

5



...


抱歉,之前提供的代码有误。这里是正确的代码:
#include <stdio.h>
#include <string.h>

int main() {
    int n;
    scanf("%d", &n);
    getchar(); // 清除缓冲区中的换行符

    char results[100][5]; // 用于存储结果,每个结果最长 "Yes!" 或 "No."(4个字符,加1留给 '\0')

    for (int i = 0; i < n; i++) {
        char sentence[81];
        fgets(sentence, 81, stdin);

        // 去掉句子末尾的换行符
        sentence[strcspn(sentence, "\n")] = '\0';

        int len = strlen(sentence);

        if (sentence[len - 1] == '?') {
            if (strstr(sentence, "PTA") != NULL) {
                strcpy(results[i], "Yes!");
            } else {
                strcpy(results[i], "No.");
            }
        } else {
            strcpy(results[i], "enen");
        }
    }

    // 统一输出所有结果
    for (int i = 0; i < n; i++) {
        printf("%s\n", results[i]);
    }

    return 0;
}

这个版本应该会正确处理每一行并给出符合题目要求的结果:
- 每个符合条件的句子都会根据结尾和内容检查,并存储在 `results` 数组中。
- 在循环结束后,统一输出结果。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-10-27 20:08:18 | 显示全部楼层
以下是一个C语言的实现,从输入中逐行读取句子,并根据题目要求给出相应的回答:
#include <stdio.h>
#include <string.h>

int main() {
    int n;
    scanf("%d", &n);
    getchar(); // 读取 \n,防止与后面的字符串输入冲突

    for (int i = 0; i < n; i++) {
        char sentence[81]; // 最大长度为80,加1是因为要给 '\0' 留出空间
        fgets(sentence, 81, stdin);
        
        // 去掉句子的末尾换行符
        sentence[strcspn(sentence, "\n")] = '\0';
        
        int len = strlen(sentence);
        
        if (sentence[len - 1] == '?') {
            if (strstr(sentence, "PTA") != NULL) {
                printf("Yes!\n");
            } else {
                printf("No.\n");
            }
        } else {
            printf("enen\n");
        }
    }

    return 0;
}

这个程序主要分为以下几个部分:

1. 读取输入整数 `n` 表示接下来的句子数。
2. 使用 `fgets` 函数来读取每一行句子。
3. 判断句子的末尾字符,如果是 `?` 检查是否包含 "PTA",否则直接输出 "enen"。

希望这个回答能帮助您解决问题!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-10-27 21:06:42 | 显示全部楼层
FishC 发表于 2024-10-27 20:08
以下是一个C语言的实现,从输入中逐行读取句子,并根据题目要求给出相应的回答:

这个是输入一次检查一次有没有统一输入在统一输出
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-10-27 21:06:52 | 显示全部楼层
dinghuang 发表于 2024-10-27 21:06
这个是输入一次检查一次有没有统一输入在统一输出


好的,以下是修改后的版本,将所有输入检查完后统一输出结果:
#include <stdio.h>
#include <string.h>

int main() {
    int n;
    scanf("%d", &n);
    getchar(); // 读取换行符

    char results[n][5]; // 用于存储结果

    for (int i = 0; i < n; i++) {
        char sentence[81];
        fgets(sentence, 81, stdin);

        // 去掉句子的末尾换行符
        sentence[strcspn(sentence, "\n")] = '\0';

        int len = strlen(sentence);

        if (sentence[len - 1] == '?') {
            if (strstr(sentence, "PTA") != NULL) {
                strcpy(results[i], "Yes!");
            } else {
                strcpy(results[i], "No.");
            }
        } else {
            strcpy(results[i], "enen");
        }
    }

    // 输出所有结果
    for (int i = 0; i < n; i++) {
        printf("%s\n", results[i]);
    }

    return 0;
}

这样程序将在所有输入处理完毕之后,一次性输出所有结果。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-10-27 21:34:10 | 显示全部楼层
#include<stdio.h>
#include<string.h>
int main()
{
        int f , i , n , x                          ;
        scanf("%d" , & n)                          ;
        getchar()                                  ; // 【必须】:这一句用于消除 scanf() 后滞留在键盘缓冲区里的 1 个 '\n'
        char arr[n][100] , arr1[100]               ;
        for(i = 0 ; i < n ; i ++)
        {
                fgets(arr[i],sizeof(arr[i]),stdin) ;
                arr1[i] = strlen(arr[i]) - 1       ;
        }
        for(i = 0 ; i < n ; i ++)
        {
                if(arr[i][arr1[i] - 1] == '?')                                 // 注意这一句
                {
                        for(f = x = 0 ; x < arr1[i] - 4 && ! f ; x ++)         // 注意这一句
                        {
                                if(! strncmp(& arr[i][x] , "PTA" , 3)) f = 1 ; // 注意这一句
                        }
                        if(f)
                        {
                                printf("Yes!\n")                             ;
                        }
                        else
                        { 
                                printf("No.\n")                              ;
                        }
                }
                else
                {
                        printf("enen.\n")                                    ;
                }
        }
        return 0                                                             ;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-10-28 20:30:31 | 显示全部楼层
#include<stdio.h>
#include<string.h>
int main()
{
        int n,i,k;
        scanf("%d",&n);
        getchar();
        int arr[n];
        char str[n][1000];
        for(i=0;i<n;i++)
        {
                fgets(str[i],sizeof(str[i]),stdin);
                str[i][strcspn(str[i],'\n')]='\0';
                arr[i]=strlen(str[i])-1;
        }
        for(i=0;i<n;i++)
        {       
                if(str[i][arr[i]]=='?')
                {
                        if(strstr(str[i],"PTA")!=NULL)
                {
                        printf("yes\n");
                }
                        else
                {
                        printf("no\n");
                }
                }
                else
                {
                        printf("enen\n");
                }
               
               
        }
        return 0;
}
运行时开始啥也没输就有一个1为啥
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-10-28 20:50:15 | 显示全部楼层

5



PTA?

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

使用道具 举报

 楼主| 发表于 2024-10-28 20:50:58 | 显示全部楼层
FishC 发表于 2024-10-27 21:06
好的,以下是修改后的版本,将所有输入检查完后统一输出结果:

jackz007 发表于 2024-10-27 21:34

5



PTA?

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

使用道具 举报

发表于 2024-10-28 20:53:38 | 显示全部楼层    本楼为最佳答案   
dinghuang 发表于 2024-10-28 20:50
jackz007 发表于 2024-10-27 21:34

5



...


抱歉,之前提供的代码有误。这里是正确的代码:
#include <stdio.h>
#include <string.h>

int main() {
    int n;
    scanf("%d", &n);
    getchar(); // 清除缓冲区中的换行符

    char results[100][5]; // 用于存储结果,每个结果最长 "Yes!" 或 "No."(4个字符,加1留给 '\0')

    for (int i = 0; i < n; i++) {
        char sentence[81];
        fgets(sentence, 81, stdin);

        // 去掉句子末尾的换行符
        sentence[strcspn(sentence, "\n")] = '\0';

        int len = strlen(sentence);

        if (sentence[len - 1] == '?') {
            if (strstr(sentence, "PTA") != NULL) {
                strcpy(results[i], "Yes!");
            } else {
                strcpy(results[i], "No.");
            }
        } else {
            strcpy(results[i], "enen");
        }
    }

    // 统一输出所有结果
    for (int i = 0; i < n; i++) {
        printf("%s\n", results[i]);
    }

    return 0;
}

这个版本应该会正确处理每一行并给出符合题目要求的结果:
- 每个符合条件的句子都会根据结尾和内容检查,并存储在 `results` 数组中。
- 在循环结束后,统一输出结果。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-10-28 20:58:52 | 显示全部楼层
FishC 发表于 2024-10-28 20:53
抱歉,之前提供的代码有误。这里是正确的代码:

5



PTA?

enen
enen
enen
enen
enen
仍然是这样
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-10-28 20:59:05 | 显示全部楼层
dinghuang 发表于 2024-10-28 20:58
5



PTA?

enen
enen
enen
enen
...


感谢您的反馈,我将提供一个正确的解决方案:
#include <stdio.h>
#include <string.h>

int main() {
    int n;
    scanf("%d", &n);
    getchar(); // 清除缓冲区中的换行符

    char results[n][5]; // 用于存储结果

    for (int i = 0; i < n; i++) {
        char sentence[81];
        fgets(sentence, 81, stdin);

        int len = strlen(sentence);

        // 去掉句子末尾的换行符
        if (sentence[len - 1] == '\n') {
            sentence[len - 1] = '\0';
        }

        if (sentence[len - 2] == '?') { // 结尾为'?',长度需减2
            if (strstr(sentence, "PTA") != NULL) {
                strcpy(results[i], "Yes!");
            } else {
                strcpy(results[i], "No.");
            }
        } else {
            strcpy(results[i], "enen");
        }
    }

    // 输出所有结果
    for (int i = 0; i < n; i++) {
        printf("%s\n", results[i]);
    }

    return 0;
}

### 关键点:
- 每行输入都是独立处理的,并存储在 `results` 数组中。
- 检查是否以 `?` 结尾,如果结尾为 `?`,则进一步检查是否包含 `"PTA"`。
- 在处理过程中,注意由于 `fgets` 读取时可能含有换行符 `\n`,需要手动去除。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-10-28 21:02:28 | 显示全部楼层

哦,抱歉对了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-21 19:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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