c语言,编程随机生成40个小写字母并赋值给一个字符数组

用c编程,随机生成40个小写字母并赋值给一个字符数组,统计该数组中各小写字母出现的次数并输出,麻烦给出运行结果,非常感谢您。

统计结果将保存在二维数组中,元素1:字母对应ASCII码,元素2:个数。

代码逻辑:循环遍历随机字母组成的数组(跳过0的元素),每次取一个字母统计个数,并将统计过的元素全部变成0。

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <malloc.h>
#include <conio.h>
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<cnt;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);
    }
}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2018-11-08

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{int i,b[26]={0};
 char a[41]={0};
 srand(time(0));
 for(i=0;i<40;i++)
   {a[i]=rand()%26+'a';
    b[a[i]-'a']++;
   }
 printf("产生的字母是:%s\n",a);
 for(i=0;i<26;i++)
   if(b[i])printf("%c: %d\n",i+'a',b[i]);
 return 0;
}

本回答被提问者采纳
第2个回答  2018-11-08

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
main()
{   int i,sum,b[26]={0};
    char a[40];
    srand(time(NULL));
    for(i=0;i<40;i++){
     a[i]=rand()%26+'a';
     printf("%c ",a[i]);
     b[a[i]-'a']++;
}
printf("\n");
for(i=0;i<26;i++){
printf("字母%c为%d个\n",'a'+i,b[i]);
}
}

如图所示,望采纳。。。。。。