匿名用户
1级
2018-11-09 回答
统计结果将保存在二维数组中,元素1:字母对应ASCII码,元素2:个数。
代码逻辑:循环遍历随机字母组成的数组(跳过0的元素),每次取一个字母统计个数,并将统计过的元素全部变成0。
#include
#include
#include
#include
#include
int **tj(char *cs);
void meError(void *p);
int cnt=0;//生成的字母种类数目
int main()
{
int n=40,**cnts=NULL,i;
char cs[41]={0},*p=cs;
srand(time(NULL));
while(n--)
*p++='a'+rand()%26;
printf("随机生成40个小写字母:%s\n",cs);
cnts=tj(cs);
printf("共计生成了%d种小写字母,分别个数为:\n",cnt);
for(i=0;i
printf("%c:%d\n",cnts[i][0],cnts[i][1]);
return 0;
}
int **tj(char *cs)//统计数组中各字母个数,返回asc码及个数组成的二维数组
{
int **cnts=NULL,**temp=NULL,*nrow=NULL,n=40,m;
char *p0=cs,*p1=NULL,c;
while(n--)
{
if(*p0!=0)
{
p1=cs;
c=*p0;
m=40;
cnt++;
temp=NULL;
nrow=NULL;
while(m--)
{
if(*p1!=0 && *p1==c)
{
if(nrow==NULL)
{
nrow=(int *)malloc(sizeof(int)*2);
meError(nrow);
nrow[0]=(int)c;
nrow[1]=1;
}
else
nrow[1]++;
*p1=0;
}
p1++;
}
if(!cnts)
{
cnts=(int **)malloc(sizeof(int *)*cnt);
meError(cnts);
}
else
{
temp=(int **)realloc(cnts,sizeof(int *)*cnt);
meError(temp);
cnts=temp;
}
cnts[cnt-1]=nrow;
}
p0++;
}
return cnts;
}
void meError(void *p)//内存申请失败
{
if(p==NULL)
{
printf("异常:内存申请失败!回车结束程序!\n");
while(getch()!='\r');
exit(0);
}
}