一道C语言2级题目,要求编写一个函数void fun(char *tt,int pp[]),统计在tt字符串中‘a'到’z'26个字母

各自出现的次数,并以数组此放在pp所指数组中。不能改主函数。下面是我的答案#include<conio.h>#include<stdio.h>voidfun(char*t... 各自出现的次数,并以数组此放在pp所指数组中。
不能改主函数。
下面是我的答案
# include <conio.h>
# include <stdio.h>

void fun(char *tt, int pp[])
{
int k;
for (k=0;k<=26;k++)
*(pp+k)=0;
while (*tt>='a'&&*tt<='z')
{k=*tt-'a';
*(pp+k)++;
tt++;}

}

main()
{
char aa[1000];
int bb[26], k;
FILE *out;
printf("\nPlease enter a char string:");
scanf("%s",aa);
fun(aa,bb);
for(k=0;k<26 ; k++)
printf("%d",bb[k]);
printf("\n");
fun("a bosom friend afar brings a distant land near", bb);
out = fopen("out.dat", "w");
for (k = 0; k < 26; k++)
fprintf(out, "%d\n", bb[k]);
fclose(out);
}
编译出现错误:Error executing cl.exe.
C:\Wexam\23010001\prog\prog.c(11) : error C2105: '++' needs l-value
请问这个是怎么回事,不明白啊
展开
 我来答
松甜恬0Je4ba
2011-09-05 · TA获得超过2.6万个赞
知道大有可为答主
回答量:7475
采纳率:100%
帮助的人:3411万
展开全部
26个字母,pp只需26个元素即可,
for (k=0;k<=26;k++)
*(pp+k)=0;

0到26,是总共27个元素,已经超出了主函数中传递过来的数组的范围了。

另外,*(pp+k)++; 修改为 (*(pp+k))++;
记住:*(p)++ 等价于 *(p++) 等价于 *p;p++;
yemaolin888
2011-09-05 · TA获得超过113个赞
知道答主
回答量:98
采纳率:0%
帮助的人:69.7万
展开全部
{k=*tt-'a';
*(pp+k) ++; //此句有问题, *(pp+k) 并非变量,不能进行自加减。
tt++;}

改为: *(pp+k) = *(pp+k) +1; 试试。

void fun(char *tt, int pp[])
{ char *ttt ;

int k;
ttt=tt;
for (k=0;k<26;k++)
*(pp+k)=0;
while ((*tt>='a')&&(*tt<='z'))
{
k=*tt-'a';
(*(pp+k))++;//*(pp+k) = *(pp+k) +1;
tt++;
}
tt=ttt;

}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
迷恋_哈哈
2011-09-05 · TA获得超过342个赞
知道答主
回答量:343
采纳率:0%
帮助的人:288万
展开全部
*(pp+k)++;
这句话有问题
error C2105: '++' needs l-value
就是说++操作符需要一个左值
换成pp[k]++;
或者 (*(pp+k))++;
就好了。你试试吧
我试过了。应该是运算符优先级问题
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
旷傲云F3
2011-09-05 · TA获得超过661个赞
知道小有建树答主
回答量:1161
采纳率:0%
帮助的人:387万
展开全部
2楼说的对,你自己写的数组越界了
而且你给PP赋初值是多此一举
你的程序实在搞不懂是要干什么
k=*tt-'a';这句左边是int型右边是char型对不上
*(pp+k)++;这句到底是*(pp+k)加一个地址,而pp+K是想干什么
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
手机用户03254
2011-09-05 · 贡献了超过371个回答
知道答主
回答量:371
采纳率:0%
帮助的人:83.9万
展开全部
main()
{
void fun(char *tt,int pp[6]);
char s[500],i;
int a[6];
printf("input char.\n");
scanf("%s",s);
fun(s,a);
for(i=0;i<6;i++)
printf("%d ",a[i]);
}
void fun(char *tt,int pp[6])
{
pp[0]=pp[1]=pp[2]=pp[3]=pp[4]=pp[5]=0;
while(*(tt++)!='\0')
{
if(*tt=='a') pp[0]++;
if(*tt=='a') pp[0]++;
if(*tt=='a') pp[0]++;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(7)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式