白丝黑丝都不得解的问题

这是PTA 找最长最短单词的题,题目就给一句话,叫你找最长和最短的单词。
我的代码运行之后出现了格式错误,具体的就是在最长和最短单词的后面多了三个点,如下:

img

源代码如下,大家如果有空可以帮我看看哪里出问题了吗?

#include
#include
int main()
{
char arr[20001];
gets(arr);//获取字符
int a = strlen(arr);

int max[2], min[2], maxi = 0, mini = 200, i = 0;//定义循环变量i,用max和min的0下标存单词在arr中的首字母位置,1下标存单词末尾字母位置,maxi是最大的长度,mini是最小的长度;
for(i; i <= a - 1; i ++)//循环遍历
{
    if((i-1<0 && arr[i] !=' '&&arr[i]!=',') || (i-1>=0 && (arr[i-1] == ' ' || arr[i-1] == ',') && (arr[i] != ' ' && arr[i] != ',')))//找首字母
    {
        int j = 0;
        for(j; arr[i+j] != ' '&&arr[i+j] != ','&&arr[i+j] != '\0'; j ++);//找单词长度(除了首字母)
        if(j+1 > maxi)
        {
            maxi = j+1;
            max[0] = i;
            max[1] = i + j;
        }//找最长单词对应在arr中的下标范围
        if(j+1 < mini)
        {
            mini = j+1;
            min[0] = i;
            min[1] = i+j;
        }//找最短单词……
    }
}
//下面是输出,没什么好说的
for(max[0]; max[0] <= max[1]; max[0]++)
{
    printf("%c",arr[max[0]]);
}
printf("\n");
for(min[0]; min[0] <= min[1]; min[0] ++)
{
    printf("%c",arr[min[0]]);
}

return 0;

}

可以换一种思路来写:

  1. 以空格分割字符串
  2. 遍历字符串,记录最长和最短的单词
  3. 输出最长和最短的单词