判断
题目:本题要求你做一个简单的自动问答机,对任何一个问句,只要其中包含 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;
}
有什么问题? 以下是一个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 小助理,如未能正确解答您的问题,请继续追问。 FishC 发表于 2024-10-27 20:08
以下是一个C语言的实现,从输入中逐行读取句子,并根据题目要求给出相应的回答:
这个是输入一次检查一次有没有统一输入在统一输出 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 小助理,如未能正确解答您的问题,请继续追问。 #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 ;
} #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为啥 jackz007 发表于 2024-10-27 21:34
5
!
?
?
PTA?
?
enen
enen
enen
enen
enen
为啥这个程序运行不对 FishC 发表于 2024-10-27 21:06
好的,以下是修改后的版本,将所有输入检查完后统一输出结果:
jackz007 发表于 2024-10-27 21:34
5
!
?
?
PTA?
?
enen
enen
enen
enen
enen
为啥这个程序运行不对 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 小助理,如未能正确解答您的问题,请继续追问。 FishC 发表于 2024-10-28 20:53
抱歉,之前提供的代码有误。这里是正确的代码:
5
!
?
?
PTA?
?
enen
enen
enen
enen
enen
仍然是这样 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 20:58
5
!
?
哦,抱歉对了{:5_109:}
页:
[1]