dinghuang 发表于 2024-10-27 20:08:12

判断

题目:
本题要求你做一个简单的自动问答机,对任何一个问句,只要其中包含 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,arr1;
        for(i=0;i<n;i++)
        {
                fgets(arr,sizeof(arr),stdin);
                arr1=strlen(arr)-1;
        }
        for(i=0;i<n;i++)
        {
                count=0;
                        if(arr]!='?')
                {
                        printf("enen\n");
                }
                else if(arr]=='?')
                {
                        for(x=0;x<arr1;x++)
                        {
                                if(arr=='P'||'T'||'A')
                                {
                                        count++;
                                }
                        }
                        if(count==3)
                                {
                                        printf("Yes!\n");
                                }
                                else
                                {
                                        printf("No.\n");
                                }
                }
        }
       
        return 0;
}
有什么问题?

FishC 发表于 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; // 最大长度为80,加1是因为要给 '\0' 留出空间
      fgets(sentence, 81, stdin);
      
      // 去掉句子的末尾换行符
      sentence = '\0';
      
      int len = strlen(sentence);
      
      if (sentence == '?') {
            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 小助理,如未能正确解答您的问题,请继续追问。

dinghuang 发表于 2024-10-27 21:06:42

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




这个是输入一次检查一次有没有统一输入在统一输出

FishC 发表于 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; // 用于存储结果

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

      // 去掉句子的末尾换行符
      sentence = '\0';

      int len = strlen(sentence);

      if (sentence == '?') {
            if (strstr(sentence, "PTA") != NULL) {
                strcpy(results, "Yes!");
            } else {
                strcpy(results, "No.");
            }
      } else {
            strcpy(results, "enen");
      }
    }

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

    return 0;
}

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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

jackz007 发表于 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 , arr1               ;
      for(i = 0 ; i < n ; i ++)
      {
                fgets(arr,sizeof(arr),stdin) ;
                arr1 = strlen(arr) - 1       ;
      }
      for(i = 0 ; i < n ; i ++)
      {
                if(arr - 1] == '?')                                 // 注意这一句
                {
                        for(f = x = 0 ; x < arr1 - 4 && ! f ; x ++)         // 注意这一句
                        {
                              if(! strncmp(& arr , "PTA" , 3)) f = 1 ; // 注意这一句
                        }
                        if(f)
                        {
                              printf("Yes!\n")                           ;
                        }
                        else
                        {
                              printf("No.\n")                              ;
                        }
                }
                else
                {
                        printf("enen.\n")                                    ;
                }
      }
      return 0                                                             ;
}

dinghuang 发表于 2024-10-28 20:30:31

#include<stdio.h>
#include<string.h>
int main()
{
        int n,i,k;
        scanf("%d",&n);
        getchar();
        int arr;
        char str;
        for(i=0;i<n;i++)
        {
                fgets(str,sizeof(str),stdin);
                str,'\n')]='\0';
                arr=strlen(str)-1;
        }
        for(i=0;i<n;i++)
        {       
                if(str]=='?')
                {
                        if(strstr(str,"PTA")!=NULL)
                {
                        printf("yes\n");
                }
                        else
                {
                        printf("no\n");
                }
                }
                else
                {
                        printf("enen\n");
                }
               
               
        }
        return 0;
}
运行时开始啥也没输就有一个1为啥

dinghuang 发表于 2024-10-28 20:50:15

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


5



PTA?

enen
enen
enen
enen
enen
为啥这个程序运行不对

dinghuang 发表于 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
为啥这个程序运行不对

FishC 发表于 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; // 用于存储结果,每个结果最长 "Yes!" 或 "No."(4个字符,加1留给 '\0')

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

      // 去掉句子末尾的换行符
      sentence = '\0';

      int len = strlen(sentence);

      if (sentence == '?') {
            if (strstr(sentence, "PTA") != NULL) {
                strcpy(results, "Yes!");
            } else {
                strcpy(results, "No.");
            }
      } else {
            strcpy(results, "enen");
      }
    }

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

    return 0;
}

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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

dinghuang 发表于 2024-10-28 20:58:52

FishC 发表于 2024-10-28 20:53
抱歉,之前提供的代码有误。这里是正确的代码:




5



PTA?

enen
enen
enen
enen
enen
仍然是这样

FishC 发表于 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; // 用于存储结果

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

      int len = strlen(sentence);

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

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

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

    return 0;
}

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

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

dinghuang 发表于 2024-10-28 21:02:28

dinghuang 发表于 2024-10-28 20:58
5




哦,抱歉对了{:5_109:}
页: [1]
查看完整版本: 判断