C语言统计字符串内单词个数,并把每个单词字母翻转

C语言统计字符串内单词个数,并把每个单词字母翻转
rt,要求是输入一段英文(有标点),最后统计这句话一共多少个单词并输出数字,第二行输出翻转后的单词(没有标点,每个单词后带空格,句子顺序不变)。我的代码如下:

#include 
#include 
int main()
{
    int i,j,stx;
    char a[500];
    while(gets(a))
    {
      int len= strlen(a);
      int sum=0;
      for(i=0;iif(a[i]==' ')
          sum=sum+1;
      }
      printf("%d\n",sum+1);
      int flag=0;
      a[len]=' ';
      char b[500];
      int k=0;
      stx=0;
    while(stxfor(i=stx;i<=len;i++)
    {
        if((a[i]>='a'&&a[i]<='z'||a[i]>='A'&&a[i]<='Z'))
          {
              b[k]=a[i];
            k++;
            continue;    
        }
        if(a[i]==' ')
        { 
          flag++;
          break;
        }
        if(a[i]=='.'||a[i]=='?'||a[i]==','||a[i]=='!')
        {
          flag++;
          continue;  
        }
    }
      for(int r=k-1;r>=stx-1;r--)
          {
            printf("%c",b[r]);
          }
        stx=stx+flag+k;
    }
      printf("\n");
    }
    return 0;
}

现在的问题是我输出的英语单词只有前两个,比如:
I love China.
输出 i evol 就没了。每个标点符号后面也空一个格方便统计单词,求解答。


#include <stdio.h>
#include <string.h>
#include <ctype.h>
int main()
{
    int i, j;
    char a[500];
    while (gets(a))
    {
        int len = strlen(a);
        int sum = 0;
        for (i = 0; i < len; i++)
        {
            if (a[i] == ' ')
                sum = sum + 1;
        }
        printf("%d\n", sum + 1);
        char b[500];
        int k = 0;
        char t;
        for (i = 0; i < len; i++) //
        {
            if ((a[i] >= 'a' && a[i] <= 'z') || (a[i] >= 'A' && a[i] <= 'Z')) //
            {
                b[k++] = a[i];
            }
            else if (a[i] == ' ' || ispunct(a[i]))
            {
                if (k == 0)
                    continue;
                if (ispunct(a[i - 1]))
                    k--;
                for (j = 0; j < k / 2; j++)
                {
                    t = b[j];
                    b[j] = b[k - j - 1];
                    b[k - j - 1] = t;
                }
                b[k] = 0;
                printf("%s ", b);
                k = b[k] = 0;
            }
        }
        printf("\n");
    }
    return 0;
}