鱼C论坛

 找回密码
 立即注册
查看: 706|回复: 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



...


抱歉,之前提供的代码有误。这里是正确的代码:

  1. #include <stdio.h>
  2. #include <string.h>

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

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

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

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

  13.         int len = strlen(sentence);

  14.         if (sentence[len - 1] == '?') {
  15.             if (strstr(sentence, "PTA") != NULL) {
  16.                 strcpy(results[i], "Yes!");
  17.             } else {
  18.                 strcpy(results[i], "No.");
  19.             }
  20.         } else {
  21.             strcpy(results[i], "enen");
  22.         }
  23.     }

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

  28.     return 0;
  29. }
复制代码


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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

  1. #include <stdio.h>
  2. #include <string.h>

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

  7.     for (int i = 0; i < n; i++) {
  8.         char sentence[81]; // 最大长度为80,加1是因为要给 '\0' 留出空间
  9.         fgets(sentence, 81, stdin);
  10.         
  11.         // 去掉句子的末尾换行符
  12.         sentence[strcspn(sentence, "\n")] = '\0';
  13.         
  14.         int len = strlen(sentence);
  15.         
  16.         if (sentence[len - 1] == '?') {
  17.             if (strstr(sentence, "PTA") != NULL) {
  18.                 printf("Yes!\n");
  19.             } else {
  20.                 printf("No.\n");
  21.             }
  22.         } else {
  23.             printf("enen\n");
  24.         }
  25.     }

  26.     return 0;
  27. }
复制代码


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

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

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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

这个是输入一次检查一次有没有统一输入在统一输出
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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


好的,以下是修改后的版本,将所有输入检查完后统一输出结果:

  1. #include <stdio.h>
  2. #include <string.h>

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

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

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

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

  13.         int len = strlen(sentence);

  14.         if (sentence[len - 1] == '?') {
  15.             if (strstr(sentence, "PTA") != NULL) {
  16.                 strcpy(results[i], "Yes!");
  17.             } else {
  18.                 strcpy(results[i], "No.");
  19.             }
  20.         } else {
  21.             strcpy(results[i], "enen");
  22.         }
  23.     }

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

  28.     return 0;
  29. }
复制代码


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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-10-27 21:34:10 | 显示全部楼层
  1. #include<stdio.h>
  2. #include<string.h>
  3. int main()
  4. {
  5.         int f , i , n , x                          ;
  6.         scanf("%d" , & n)                          ;
  7.         getchar()                                  ; // 【必须】:这一句用于消除 scanf() 后滞留在键盘缓冲区里的 1 个 '\n'
  8.         char arr[n][100] , arr1[100]               ;
  9.         for(i = 0 ; i < n ; i ++)
  10.         {
  11.                 fgets(arr[i],sizeof(arr[i]),stdin) ;
  12.                 arr1[i] = strlen(arr[i]) - 1       ;
  13.         }
  14.         for(i = 0 ; i < n ; i ++)
  15.         {
  16.                 if(arr[i][arr1[i] - 1] == '?')                                 // 注意这一句
  17.                 {
  18.                         for(f = x = 0 ; x < arr1[i] - 4 && ! f ; x ++)         // 注意这一句
  19.                         {
  20.                                 if(! strncmp(& arr[i][x] , "PTA" , 3)) f = 1 ; // 注意这一句
  21.                         }
  22.                         if(f)
  23.                         {
  24.                                 printf("Yes!\n")                             ;
  25.                         }
  26.                         else
  27.                         {
  28.                                 printf("No.\n")                              ;
  29.                         }
  30.                 }
  31.                 else
  32.                 {
  33.                         printf("enen.\n")                                    ;
  34.                 }
  35.         }
  36.         return 0                                                             ;
  37. }
复制代码
小甲鱼最新课程 -> https://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为啥
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

5



PTA?

enen
enen
enen
enen
enen
为啥这个程序运行不对
小甲鱼最新课程 -> https://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
为啥这个程序运行不对
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

5



...


抱歉,之前提供的代码有误。这里是正确的代码:

  1. #include <stdio.h>
  2. #include <string.h>

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

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

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

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

  13.         int len = strlen(sentence);

  14.         if (sentence[len - 1] == '?') {
  15.             if (strstr(sentence, "PTA") != NULL) {
  16.                 strcpy(results[i], "Yes!");
  17.             } else {
  18.                 strcpy(results[i], "No.");
  19.             }
  20.         } else {
  21.             strcpy(results[i], "enen");
  22.         }
  23.     }

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

  28.     return 0;
  29. }
复制代码


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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

5



PTA?

enen
enen
enen
enen
enen
仍然是这样
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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



PTA?

enen
enen
enen
enen
...


感谢您的反馈,我将提供一个正确的解决方案:

  1. #include <stdio.h>
  2. #include <string.h>

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

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

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

  11.         int len = strlen(sentence);

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

  16.         if (sentence[len - 2] == '?') { // 结尾为'?',长度需减2
  17.             if (strstr(sentence, "PTA") != NULL) {
  18.                 strcpy(results[i], "Yes!");
  19.             } else {
  20.                 strcpy(results[i], "No.");
  21.             }
  22.         } else {
  23.             strcpy(results[i], "enen");
  24.         }
  25.     }

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

  30.     return 0;
  31. }
复制代码


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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

哦,抱歉对了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-7 19:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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