问题遇到的现象和发生背景
用代码块功能插入代码,请勿粘贴截图
#include <stdio.h>[]()
int main()
{
char path[255];
gets(path);
int t[255]={0};
char ch;
FILE* fp;
fp=fopen(path,"r");
if(fp==NULL)
{
printf("文件打开失败!\n");
return 0;
}
else
{
while(fscanf(fp,"%c",&ch)==1)
{
t[ch]++;
printf("%c",ch);
}
}
fclose(fp);
printf("\n");
for(int i=0;i<255;i++)
{
if(t[i]>0&&i>=32)
{
if(i==32) printf("%s: %d\n","0x20",t[i]);
else printf("%c: %d\n",i,t[i]);
}
}
return 0;
}
我的解答思路和尝试过的方法
想要把最后 算的次数也就是t[i]那块按照从小到大的顺序排序,一开始想到将最小的数与t[0]对换;再将t[1]~t[n]中最小的数与t[1]对换……每比较一轮,找出一个最小的,共比较n-1轮这么做,结果前面的字符没排序就错了,后来想到将字符和符号“:”还有次数放到一个结构体里,把次数单独排序这种方法,但是不会写,请各位帮忙写一下。
我想要达到的结果
把次数从小到大排序