输入一行多个字符串,统计其中有多少个回文字符串。(语言-c语言)

代码出错了,字母都一样的时候可以统计出个数,不一样的时候一直为0
且要输入俩行一样的,但实际只要输入一行
题目要求是
输入一行多个字符串,统计其中有多少个回文字符串。
(注释:回文字符串:头尾字母一致的字符串)

//例如输入: abc aba a abcdeffedcba cc cba 输出 4
//我的代码如下
#include
#include
#include
#include
int main(void)
{ char a[100],c,string[81];
int i=0,j=0,k,count=0,flag=0;
printf("请输入一串英文字符:\n");
gets(a);
gets(string);
while(a[i]!='\0')
i++;i--;
for(;j<=i;i--,j++)
{
if(a[i]!=a[j]) break;
}
if(j<=i) ;
else
{
for(k=0; (c = string[k]) != '\0'; k++)
{
if(c == ' ') flag = 0;
else if(flag == 0)
{
flag = 1;
count++;
}
}

}
printf("%d\n",count);
system("pause");
return 0;
}

1、程序在输入字符串时使用了两个 gets 函数,这是不安全的,因为 gets 函数会在遇到换行符或文件结尾时停止读取输入,但是不会检查输入的长度是否超过了数组的长度,这样很容易引起缓冲区溢出,因此建议使用 fgets 函数来替代 gets 函数。

2、程序的主要流程是首先将输入的字符串检查是否为回文字符串,然后再对后续的输入字符串进行统计。但是,由于程序将所有输入字符串读入同一个字符数组 string 中,所以程序无法检测到后续的输入字符串。正确的做法是使用循环读入多个字符串,然后对每个字符串分别进行检查。

3、程序在检查字符串是否为回文字符串时,只对前半部分进行了检查,如果前半部分不是回文字符串就直接退出了循环。但是这样做是不正确的,因为一个字符串可能只有前半部分不是回文字符串,后半部分是回文字符串。正确的做法是将字符串的前后两端同时进行检查,直到找到不匹配的字符为止。

4、程序在统计输入的字符串中有多少个回文字符串时,使用了一个标志变量 flag 来记录当前字符是否是字符串的第一个字符,并在遇到空格时将 flag 设为 0。但是,这样做是不正确的,因为如果输入的字符串中有连续的空格,那么程序会误认为这些空格之间是多个字符串,导致统计结果错误。正确的做法是使用一个标志变量记录当前字符是否是字符串的第一个非空格字符,并在遇到空格或字符串结尾时进行统计。

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

int main(void)
{
    char a[100];
    int count = 0;
    bool isPalindrome;

    printf("请输入一串英文字符:\n");

    while (fgets(a, 100, stdin)) {
        int len = strlen(a);
        // 去掉字符串末尾的换行符
        if (a[len - 1] == '\n') {
            a[len - 1] = '\0';
        }

        // 检查字符串是否为回文字符串
        isPalindrome = true;
        for (int i = 0, j = len - 1; i < j; i++, j--) {
            if (a[i] != a[j]) {
                isPalindrome = false;
                break;
            }
        }

        // 统计结果
        if (isPalindrome) {
            count++;
        }
   }
printf("%d\n", count);
return 0;
}

望采纳