首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

一道考试题解决办法

2012-02-08 
一道考试题#include\\include可以这样用吗?可以的话,这里如何解释呀\\  voidf(char*s,char*t)  {chark  k

一道考试题
#   include             \\include   可以这样用吗?可以的话,这里如何解释呀\\
  void   f(char   *s,   char   *t)  
  {   char   k;  
  k=*s;   *s=*t;   *t=k;  
  s++;   t--;  
  if   (*s)   f(s,   t);   \\这里的if条件是不是s的地址不为null\\
  }  
  main()  
  {   char   str[10]= "abcdefg ",   *p   ;  
  p=str+strlen(str)/2+1;       \\这里是什么意思呀?是不是p=str[0]+(int)    
        f(p,   p-2);                               \\((strlen(str)/2)+1,也就是p=str[4]??
  printf( "%s\n ",str);             \\好象答案就是gfedcba
  }

[解决办法]
我不知道你想要干什么,如果只是为了反转字符串的话。用这个也行呀
void main()
{
char str[10]= "abcdefgh ", *p, *p1, p2;

p = str;
p1 = str+strlen(str) - 1;
while(p < p1)
{
p2 = *p;
*p++ = *p1;
*p1-- = p2;
}
printf( "%s\n ",str); //好象答案就是gfedcba
}

[解决办法]
实现一个字符串反转。
f()是一个递规函数。
# include "string.h " \\include string库
  void f(char *s, char *t)
  { char k;
  k=*s; *s=*t; *t=k;
  s++; t--;
  if (*s) f(s, t); \\if条件是*s不为空,即s指向的内容不为空
  }
  main()
  { char str[10]= "abcdefg ", *p ;
  p=str+strlen(str)/2+1; \\指针p指向中间的元素再靠后一个
f(p, p-2); \\((strlen(str)/2)+1,也就是p=str[4]??这个是str[5]!!
  printf( "%s\n ",str); \\答案就是gfedcba,但是这个算法只对奇数长的串成立。
  }
如果要奇偶通用这么写:
#include "string.h "
void f(char *s, char *t)
{
char k;
k=*s;
*s=*t;
*t=k;
s++;
t--;
if(*s) f(s, t);
}
void main()
{
char str[10]= "abcdefg ",*p;
int b=strlen(str);
p=str+b/2;
f(p+b%2, p-1);printf( "%s\n ",str);
}

热点排行