请编一个函数fun(char *s),该函数的功能是:把字符串中的内容逆置。
#include<string.h>例如,字符串中原有的字符串为"abcdefg",则调用该函数后,串中的内容为"gfedcba"。其中只有fun函数是我填写的,不知道问...
#include <string.h>
例如,字符串中原有的字符串为"abcdefg",则调用该函数后,串中的内容为"gfedcba"。
其中只有fun函数是我填写的,不知道问题出在哪?哪位好心人帮忙解答下?
#include <conio.h>
#include <stdio.h>
#define N 81
void fun(char*s)
{
int i,j;
char *t;
t=s;
j=strlen(s);
for(i=0;i<j;i++)
s[i]=t[j-i-1];
}
main()
{
char a[N];
FILE *out;
printf("Enter a string:");
gets(a);
printf("The original string is:");
puts(a);
fun(a);
printf("\n");
printf("The string after modified:");
puts(a);
strcpy(a,"Hello World!");
fun(a);
/******************************/
out=fopen("out.dat","w");
fprintf(out,"%s",a);
fclose(out);
/******************************/
} 展开
例如,字符串中原有的字符串为"abcdefg",则调用该函数后,串中的内容为"gfedcba"。
其中只有fun函数是我填写的,不知道问题出在哪?哪位好心人帮忙解答下?
#include <conio.h>
#include <stdio.h>
#define N 81
void fun(char*s)
{
int i,j;
char *t;
t=s;
j=strlen(s);
for(i=0;i<j;i++)
s[i]=t[j-i-1];
}
main()
{
char a[N];
FILE *out;
printf("Enter a string:");
gets(a);
printf("The original string is:");
puts(a);
fun(a);
printf("\n");
printf("The string after modified:");
puts(a);
strcpy(a,"Hello World!");
fun(a);
/******************************/
out=fopen("out.dat","w");
fprintf(out,"%s",a);
fclose(out);
/******************************/
} 展开
2个回答
展开全部
你的问题在于for循环里面,字符串前面的一部分被都后面的一部分赋值以后,就丢失了,那后一半的值再用前一半的来赋值就是相同的了,那结果就是输入123456,输出是654456,只需要在赋值前把原值保存起来,然后再赋值就可以了,我帮你修改了一下:
void fun(char*s)
{
int i,j;
char *t;
t=s;
j=strlen(s);
char temp;
for(i=0;i<j/2;i++)
{
temp = s[i];
s[i]= t[j-i-1];
t[j-i-1] = temp;
}
}
void fun(char*s)
{
int i,j;
char *t;
t=s;
j=strlen(s);
char temp;
for(i=0;i<j/2;i++)
{
temp = s[i];
s[i]= t[j-i-1];
t[j-i-1] = temp;
}
}
展开全部
char* Reverse(char* s)
{
//将q指向字符串最后一个字符
char* q = s ;
while( *q++ ) ;
q -= 2 ;
//分配空间,存储逆序后的字符串。
char* p = newchar[sizeof(char) * (q - s + 2)] ;
char* r = p ;
// 逆序存储
while(q >= s)
*p++ = *q-- ;
*p = '\0' ;
return r ;
}
{
//将q指向字符串最后一个字符
char* q = s ;
while( *q++ ) ;
q -= 2 ;
//分配空间,存储逆序后的字符串。
char* p = newchar[sizeof(char) * (q - s + 2)] ;
char* r = p ;
// 逆序存储
while(q >= s)
*p++ = *q-- ;
*p = '\0' ;
return r ;
}
追答
你t和s指向了同一个地址。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询
广告 您可能关注的内容 |