求是否是回文串,且不同字母个数?哪里出问题了?为什么输出结果全是no?

#include <stdio.h>
#include <string.h>
int main()
{
int m,num=0,geshu,j;
char ch[51],min;
while (scanf("%s", ch) == 1)
{
num = 0;
geshu = 1;
m = strlen(ch);
for (int i = 0;i<(m/2);i++)
{
if (ch[i] == ch[m - 1 - i])
num=num+1;
}
if (num == (m / 2))
{
printf("YES ");
for (int i = 0; i <= num; i++)
{
for(j=i;j<=num;j++)
{ if(ch[j]>ch[j+1])
{min=ch[j+1];
ch[j+1]=ch[j];
ch[j]=min;}}
}
for(int i=0;i<num;i++)
{
if (ch[i] != ch[i+1])
geshu++;
}
//if((m%2)==0)
printf("%d\n",geshu-1);
//else
//printf("%d\n",geshu);
}
else
printf("NO\n");
}
return 0;
}

样例输出是这样的

img

求是否是回文串,且不同字母个数?哪里出问题了?为什么输出结果全是no?

修改如下,供参考:

#include <stdio.h>
#include <string.h>  //修改
int main()
{
    int m,num=0,geshu;// ,ch[51] 修改
    char ch[51];      // 修改
    while (scanf("%s", ch) == 1)
    {
        num = 0;        //修改
        geshu = 1;
        m = strlen(ch);//m = strlen(ch)-1;修改
        for (int i = 0;i<(m/2);i++)
        {
            if (ch[i] == ch[m - 1 - i])
                num=num+1;
        }
        if (num == (m / 2)) //if ((num-1) == (m / 2))修改
        {
            printf("YES ");
            //这里开始统计字母个数
            for (int i = 1; i <= num; i++)
            //for (int i = 1; i < num; i++)修改
            {
                if (ch[i] != ch[i - 1])
                    geshu++;
            }
            //if(m%2==0)  修改
            printf("%d\n",geshu);
            //else        修改
            //    printf("%d\n",geshu+1);修改
        }
        else
            printf("NO\n");
    }
    return 0;
}