C语言统计给定文本文件calcuchar.txt中的大写字母、小写字母、阿拉伯数字出现次数,并按照字

C语言统计给定文本文件calcuchar.txt中的大写字母、小写字母、阿拉伯数字出现次数,并按照字典顺序输出字符次数;根据统计结果,将以上字符按照字典顺序,以数据块方式写到count.txt文件中(如:’A’出现3次,则在count.txt中写入3个’A’),输出count.txt文件内容。要求:统计字符个数时,不得使用开关语句,不得逐个字符比较。 哪位大神解答一下,谢谢

请问你可以写文件操作么? 请先把你的思路写出来吧。 

我很奇怪,怎么能不用if?怎们能不逐个比较?

#include<stdio.h>
int main(){
    FILE *in = fopen("F:\\CCCCCCCCCCCCCCC\\clion_work\\Test\\calcuchar.txt", "r");
    FILE *out = fopen("F:\\CCCCCCCCCCCCCCC\\clion_work\\Test\\count.txt","w");
    char ch;
    int num[75]={0};   //48-122=74;  48 65 97
    while(!feof(in)){
        ch = fgetc(in);
        num[ch-48]++;
    }
//    for(int i=0;i<10;i++) printf("%d %d\n",i,num[i]);
//    for(int i=0;i<26;i++) printf("%c %d\n",'A'+i,num[17+i]);
//    for(int i=0;i<26;i++) printf("%c %d\n",'a'+i,num[49+i]);
    char str[5]={' ',' ',' ','\n','\0'};
    char str2[6]={' ',' ',' ',' ','\n','\0'};
    for(int i=0;i<10;i++){
        if(num[i]<10){
            str[0] = '0'+i;
            str[2] = '0'+num[i];
            fputs(str,out);
        }else{
            str2[0] = '0'+i;
            str2[2] = '0'+num[i]/10;
            str2[3] = '0'+num[i]%10;
            fputs(str2,out);
        }
    }
    for(int i=0;i<26;i++){
        if(num[17+i]<10){
            str[0] = 'A'+i;
            str[2] = '0'+num[17+i];
            fputs(str,out);
        }else{
            str2[0] = 'A'+i;
            str2[2] = '0'+num[17+i]/10;
            str2[3] = '0'+num[17+i]%10;
            fputs(str2,out);
        }
    }
    for(int i=0;i<26;i++){
        if(num[49+i]<10){
            str[0] = 'a'+i;
            str[2] = '0'+num[49+i];
            fputs(str,out);
        }else{
            str2[0] = 'a'+i;
            str2[2] = '0'+num[49+i]/10;
            str2[3] = '0'+num[49+i]%10;
            fputs(str2,out);
        }
    }
    fclose(in);
    fclose(out);
    return 0;
}

 

#include<stdio.h>
int main(){
    FILE *in = fopen("F:\\CCCCCCCCCCCCCCC\\clion_work\\Test\\calcuchar.txt", "r");
    FILE *out = fopen("F:\\CCCCCCCCCCCCCCC\\clion_work\\Test\\count.txt","w");
    char ch;
    int num[75]={0};   //48-122=74;  48 65 97
    while(!feof(in)){
        ch = fgetc(in);
        num[ch-48]++;
    }
    for(int i=0;i<10;i++){
        for(int j=0;j<num[i];j++){
            fputc('0'+i,out);
            if(j==num[i]-1) fputc('\n',out);
        }
    }
    for(int i=0;i<26;i++){
        for(int j=0;j<num[17+i];j++){
            fputc('A'+i,out);
            if(j==num[17+i]-1) fputc('\n',out);
        }
    }
    for(int i=0;i<26;i++){
        for(int j=0;j<num[49+i];j++){
            fputc('a'+i,out);
            if(j==num[49+i]-1) fputc('\n',out);
        }
    }
    fclose(in);
    fclose(out);
    return 0;
}