一道考试题
# 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);
}