Jadevil 2022-12-20 21:26 采纳率: 100%
浏览 21
已结题

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

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

//例如输入: abc aba a abcdeffedcba cc cba 输出 4
//我的代码如下
#include<string>
#include<iostream>
#include<stdio.h>
#include<math.h>
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条回答 默认 最新

  • |__WhoAmI__| 2022-12-20 21:41
    关注

    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;
    }
    

    望采纳

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 12月31日
  • 已采纳回答 12月23日
  • 创建了问题 12月20日

悬赏问题

  • ¥15 我的数据无法存进链表里
  • ¥15 神经网络预测均方误差很小 但是图像上看着差别太大
  • ¥15 Oracle中如何从clob类型截取特定字符串后面的字符
  • ¥15 想通过pywinauto自动电机应用程序按钮,但是找不到应用程序按钮信息
  • ¥15 如何在炒股软件中,爬到我想看的日k线
  • ¥15 seatunnel 怎么配置Elasticsearch
  • ¥15 PSCAD安装问题 ERROR: Visual Studio 2013, 2015, 2017 or 2019 is not found in the system.
  • ¥15 (标签-MATLAB|关键词-多址)
  • ¥15 关于#MATLAB#的问题,如何解决?(相关搜索:信噪比,系统容量)
  • ¥500 52810做蓝牙接受端