yueyufeng 发表于 2023-11-29 22:42:26

输出不了

有多组输入,每行输入一串字符,保证字符串长度不会大于 100000,字符串由大小写英文字母和空格组成,以字符串“2013”作为结束标志。

每行输出一个字符串,如果输入是回文串,输出“YES”,否则输出“NO”(注意:判断的时候空格是不作判断的,详见样例)。

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

int main()
{
    int n,i,j,flat=1;
    char a,b;
    while(gets(a)!=EOF)
    {
      int len=strlen(a);
      for(i=0;i<len;i++)
      {
            if(a!=' ');
            {
                b=a;
            }
            if(a==' ');
            {
                continue;
            }
      }
      for(i=0;i<=len/2;i++);
      {
            if(b!=a)
            {
                flat=0;
                break;
            }
      }
      if(flat==1)
      {
            printf("YES\n");
      }
      if(flat==0)
      {
            printf("NO\n");
      }
      if(strcmp(a,2013)==0)
      {
            break;
      }
    }
    return 0;
}

FishC_GPT 发表于 2023-11-29 22:42:46

问题出在使用了错误的输入函数。在C语言中,`gets`函数用于从标准输入读取一行字符串,但是它只接受`char*`类型的参数,而不是单个字符。因此,需要将输入改为使用`scanf`函数。

另外,题目要求判断输入的字符串是否是回文串,而不是单个字符。因此,我们需要对每行输入的字符串进行判断。

下面是修改后的代码:

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

int isPalindrome(char *str) {
    int len = strlen(str);
    int i, j;
    for (i = 0, j = len - 1; i < j; i++, j--) {
      // 跳过空格
      while (str == ' ') i++;
      while (str == ' ') j--;
      if (str != str) {
            return 0; // 不是回文串
      }
    }
    return 1; // 是回文串
}

int main() {
    char str;
    while (scanf("%s", str) != EOF) {
      if (strcmp(str, "2013") == 0) {
            break; // 输入结束
      }
      if (isPalindrome(str)) {
            printf("YES\n");
      } else {
            printf("NO\n");
      }
    }
    return 0;
}

在这个代码中,我们定义了一个`isPalindrome`函数来判断输入的字符串是否是回文串。在判断时,我们使用两个指针,分别从字符串的头部和尾部开始向中间遍历,同时跳过空格。如果发现两个指针指向的字符不相等,则返回0,表示不是回文串;如果遍历完成后没有出现不相等的情况,则返回1,表示是回文串。

在`main`函数中,我们使用`scanf`函数来读取输入的字符串,并将它与字符串"2013"进行比较,以判断是否终止输入。然后调用`isPalindrome`函数来判断输入的字符串是否是回文串,并根据结果输出"YES"或"NO"。

以上回复来自 -- ChatGPT(FishC官方接口),如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: 输出不了