第1个回答 2012-01-16
#include "stdio.h"
void fun(char * s)
{
int i,n,k;
char c;
n=0;
for(i=0;s[i]!='\0';i++)
n++; //求字符串s的长度n,其实可以用n=strlen(s);
if(n%2==0)
k=n-1; //当s的长度n为偶数时,移动字符末位置为k=n-1
else
k=n-2; //当s的长度n为奇数时,移动字符末位置为k=n-2
c=s[k]; //保存最后一个移动奇字符
for(i=k-2;i>=1;i=i-2) //从倒数第2个奇字符到最前面第1个奇字符,逐个移动
s[i+2]=s[i];
s[1]=c; //最后一个奇字符移动到最前面
}
第2个回答 2012-01-18
char s[80]="abcdefgh"; //定义数组
fun(s); //传的是数组指针,所以fun函数执行完后s的值就真正的改变了。
fun()函数的执行过程如下:以"abcdefgh"为例
for(i=0;s[i]!='\0';i++)
n++;
//得到n=8
if(n%2==0)
k=n-1;
else
k=n-2;
//判断n是否为偶数,如果是偶数,则将k赋值为n的前一个奇数
//此时k=8-1=7
c=s[k];
//先把最后这个奇数下标的值保存到变量c中
//c=h
for(i=k-2;i>=1;i=i-2)
s[i+2]=s[i];
//开始执行循环体
//i=7-2=5;i满足>=1执行s[5+2]=s[5],即s[7]=s[5]
//此时s="abcdefgf"
//执行i=i-2即i=5-2=3;i满足>=1执行s[3+2]=s[3],即s[5]=s[3]
//此时s="abcdedgf"
//执行i=i-2即i=3-2=1;i满足>=1执行s[1+2]=s[1],即s[3]=s[1]
//此时s="abcbedgf"
//执行i=i-2即i=1-2=-1;i不满足>=1则跳出循环体
s[1]=c;
//将s[1]的值赋值为h
//此时s="ahcbedgf"
//最后返回此s
第3个回答 2012-01-18
int i,n,k;
char c;
n=0;
for(i=0;s[i]!='\0';i++)/*判断s[i]中的数据是否为0,
n++; 如果不为0,即为字符,所以用n存放字符个数*/
if(n%2==0) /*判断n是否偶数,
k=n-1; /* 是偶数,则n-1=k,而k则是字符串中最右边的奇数下标值,也是上限值*/
else /*不是偶数,即为奇数,
k=n-2; /*则n-2=k,而k则是字符串中最右边的奇数下标值,n-1是字符串的上限值*/
c=s[k]; /*用c存储最右边的奇数下标值存储单元中的数据*/
for(i=k-2;i>=1;i=i-2) /*下标为奇数的字符
s[i+2]=s[i]; 右移到下一个奇数位置
s[1]=c;/*将最右边被移出的字符串的字符绕回到第一个奇数位置*/