C语言关于指针的一道题求大家帮忙解答
题目:输入一个字符串,让用户选择a或b选项,选a时调用reverse函数进行转置处理;选b时调用upper函数进行大写化处理。要求采用函数指针实现(参考例8.23的实现)...
题目:输入一个字符串,让用户选择a或b选项,选a时调用reverse函数进行转置处理;选b时调用upper函数进行大写化处理。要求采用函数指针实现(参考例8.23的实现),各调用函数内的功能采用字符指针进行操作。
我写的程序:
#include <stdio.h>
#include <string.h>
char reverse(char *p,int n)
{
int i,j,t;
for(i=0;i<n/2;i++);
{
t=*(p+i);
*(p+i)=*(p+n-1-i);
*(p+n-1-i)=t;
}
for(j=0;j<n;j++)
printf("%s",*(p+j));
}
char upper(char *p,int n)
{
int i;
for(;*p!='\0';*p++)
{
if(*p>='a'&&*p<='z')
*p+='A'-'a';
}
for(i=0;i<n;i++)
printf("%s",*(p+i));
}
int main()
{
char reverse(char *p,int n);
char upper(char *p,int n);
int (*x)(char,int);
char str[999],a,b,m,n,c;
char *y=str;
printf("please enter string str:");
gets(str);
n=strlen(str);
printf("please choose a or b:");
scanf("%s",&m);
if(m==a) x=reverse;
else if(m==b) x=upper;
c=(*x)(*y,n);
if(m==a) printf("reverse:%s\n",c);
else printf("upper:%s\n",c);
return 0;
}
运行不出结果,拜托大家帮我看看错在哪里 展开
我写的程序:
#include <stdio.h>
#include <string.h>
char reverse(char *p,int n)
{
int i,j,t;
for(i=0;i<n/2;i++);
{
t=*(p+i);
*(p+i)=*(p+n-1-i);
*(p+n-1-i)=t;
}
for(j=0;j<n;j++)
printf("%s",*(p+j));
}
char upper(char *p,int n)
{
int i;
for(;*p!='\0';*p++)
{
if(*p>='a'&&*p<='z')
*p+='A'-'a';
}
for(i=0;i<n;i++)
printf("%s",*(p+i));
}
int main()
{
char reverse(char *p,int n);
char upper(char *p,int n);
int (*x)(char,int);
char str[999],a,b,m,n,c;
char *y=str;
printf("please enter string str:");
gets(str);
n=strlen(str);
printf("please choose a or b:");
scanf("%s",&m);
if(m==a) x=reverse;
else if(m==b) x=upper;
c=(*x)(*y,n);
if(m==a) printf("reverse:%s\n",c);
else printf("upper:%s\n",c);
return 0;
}
运行不出结果,拜托大家帮我看看错在哪里 展开
2个回答
展开全部
第一个错误:m是一个普通变量,输入的时候,格式不应该是%s,所以主函数里面的scanf("%s",&m);应该改成scanf("%c",&m);
第二个错误:if(m==a) x=reverse;
else if(m==b) x=upper;
a和b没有值,所以应该把这个改成
a='a';b='b';
if(m==a) x=reverse;
else if(m==b) x=upper;
第三个错误:c=(*x)(*y,n);被调函数第一个参数是指针,传过去的应该是地址,所以应该改成
c=(*x)(y,n);
第二个错误:if(m==a) x=reverse;
else if(m==b) x=upper;
a和b没有值,所以应该把这个改成
a='a';b='b';
if(m==a) x=reverse;
else if(m==b) x=upper;
第三个错误:c=(*x)(*y,n);被调函数第一个参数是指针,传过去的应该是地址,所以应该改成
c=(*x)(y,n);
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2015-06-09 · 知道合伙人软件行家
关注
展开全部
#include <stdio.h>
#include <string.h>
char* reverse(char *p,int n)
{
int i;
char t;
for(i=0; i <= n/2; i++)
{
t=p[i];
p[i]=p[n-1-i];
p[n-1-i]=t;
}
return p;
}
char* upper(char *p,int n)
{
int i;
for(i=0; i < n; i++)
{
if(p[i]>='a'&&p[i]<='z')
p[i]+='A'-'a';
}
return p;
}
int main()
{
char* (*x)(char*,int);
char str[999],m,n,*c;
printf("please enter string str:");
gets(str);
n=strlen(str);
printf("please choose a or b:");
scanf("%c",&m);
if(m=='a') x=reverse;
else if(m=='b') x=upper;
c=x(str,n);
if(m=='a') printf("reverse:%s\n",c);
else printf("upper:%s\n",c);
return 0;
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询