回复 12楼 Sopphhiiaa
											哈哈,是我看错了,以为你是从数组头开始读的。所以算法就写错。现我贴出代码,请你参考。
我的设计的原理是,先算出非字母的字符数,然后进行数组移位,经过调试,结果是对的
因为你的数组是20个字符,而且非字母字符也不管是否是逆序,哈,所以结果有图
#include <stdio.h>
#include <string.h>
int main(void)
{
    
    char a[20];
    int len;
    int p,q;
    char c[20][20];
    char d[20];
    char b[20][20];
    int i,j,k;
    int m[20];
    int aa=0;/*计算非字母字符的数量*/
    char temp;/*数组移位的临时存储变量*/
    j=0;
    k=0;
    gets(a); 
    len=strlen(a);
    for(i=0;i<len;i++)
    {
        if(a[i]==' ')
        {
            j++;
            
            k=0;
            continue;
        }
        
        b[j][k]=a[i];
        k++;
        m[j]=k;
    }
    /*int t;
    for(t=0;t<j+1;t++)
    printf("%d\n",m[t]);*/
    
    for(p=0;p<j+1;p++)
    {
      aa=0;/*初始化为零,因为每一个字符串都可能存在非字母字符*/
        for(q=0;q<m[p];q++)
        { 
                c[p][q]=b[p][m[p]-1-q];/*先不管字母或非字母,都按逆序存储*/
        
            if(b[p][m[p]-1-q]>='a'&&b[p][m[p]-1-q]<='z'||b[p][m[p]-1-q]>='A'&&b[p][m[p]-1-q]<='Z') ;
            else
              aa++;/*这里是计算非字母字符数*/
            
        }
        if(aa>0)/*如果存在非字母字符则进行数组移位,每移动一次最终把头接到尾*/
        {
           for(q=0;q<aa;q++)
           {
         temp=c[p][0];
                 for(j=0;j<m[p]-1;j++)
                  {
                     c[p][j]=c[p][j+1];
                  }
                  c[p][j]=temp;
                }
          }
    }
         p=0;
         while(p<j+1)
          {
            for(q=0;q<m[p];q++)
           {
           printf("%c",c[p][q]);
           }
           p++;
           printf(" ");
          }
    
      getch();/*这个你可以删除,这是wintc里加的调试函数*/
    return 0; 
    
    
}
	
		
			
        
				
				
					
						图片附件: 游客没有浏览图片的权限,请 
登录 或 
注册 
					
				
			 
		
	
	
		
			
        
				
				
					
						图片附件: 游客没有浏览图片的权限,请 
登录 或 
注册