回复 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;
}
图片附件: 游客没有浏览图片的权限,请
登录 或
注册
图片附件: 游客没有浏览图片的权限,请
登录 或
注册