编写一个函数,函数的功能是把字符串中的内容逆置
字符串中原有的内容为:abcdefg,则调用该函数后,串中的内容为:gfedcba。#include<string.h>#include<stdio.h>charfun(...
字符串中原有的内容为:abcdefg,则调用该函数后,串中的内容为:
gfedcba。
#include<string.h>
#include<stdio.h>
char fun(char *s)
{
char *p;
int i=0,m;
m=strlen(s);
p=s;
for(i=0;i<m+1;i++)
{
*(s+i)=*(p+m-i);
}
}
void main()
{
char *s;
gets(s);
printf("%s\n",fun(s));
}
请问,这个程序哪里错了,谢谢。 展开
gfedcba。
#include<string.h>
#include<stdio.h>
char fun(char *s)
{
char *p;
int i=0,m;
m=strlen(s);
p=s;
for(i=0;i<m+1;i++)
{
*(s+i)=*(p+m-i);
}
}
void main()
{
char *s;
gets(s);
printf("%s\n",fun(s));
}
请问,这个程序哪里错了,谢谢。 展开
4个回答
展开全部
p和s指向的是同一个字符串,
a b c d
当把*(p+4):d赋给*(s+0):a时,*(p+0)的值也改变了,成了*(s+0):d。
此时,p s指向的字符串为
d b c d。
懂了?
你可以多加一个抽象层次,用一个swap函数完成,
void swap(char* ch1, char* ch2)
{
char tmp = * ch1;
*ch1 = * ch2;
*ch2 = tmp;
}
然后直接调用swap(s+i,p+m-i)
a b c d
当把*(p+4):d赋给*(s+0):a时,*(p+0)的值也改变了,成了*(s+0):d。
此时,p s指向的字符串为
d b c d。
懂了?
你可以多加一个抽象层次,用一个swap函数完成,
void swap(char* ch1, char* ch2)
{
char tmp = * ch1;
*ch1 = * ch2;
*ch2 = tmp;
}
然后直接调用swap(s+i,p+m-i)
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
呵呵 举个例子;
字符是放在指定地址空间里的,你做的仅是把后一地址的内容放在前面的地址空间里,而前面地址空间的内容则被覆盖了
举个例子;
a1=b
a2=c
你想交换a1,a2内容;
而你程序
则是a1=a2=c
b被覆盖了
应该做保护,建个中间变量b0;........b0=a2=c; a2=a1=b; a1=b0=c;
字符是放在指定地址空间里的,你做的仅是把后一地址的内容放在前面的地址空间里,而前面地址空间的内容则被覆盖了
举个例子;
a1=b
a2=c
你想交换a1,a2内容;
而你程序
则是a1=a2=c
b被覆盖了
应该做保护,建个中间变量b0;........b0=a2=c; a2=a1=b; a1=b0=c;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
逆置的话,一个for循环,第一个和最后一个交换,第二个和倒数第二个交换。。。。。。。如此、、如此、、不就可以了吗,代码自己写写试试吧。。祝你好运。。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我看错了。。你这个逻辑就有问题肯定是不行的p=s指向的是一个地方
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询