谁能帮我解释一下这个程序每一步的意思,谢谢啊,尤其是那个le,少于 英语怎么说? 是 fewer than 还是 less

发布时间:2020-07-09 15:52:28

谁能帮我解释一下这个程序每一步的意思,谢谢啊,尤其是那个le,少于 英语怎么说? 是 fewer than 还是 less

网友回答

首先要知道每个字符串都对应于一个ASCII编码,也就是码数不一样比如空格对应的ASCII十进中数为32,也就是first[32]的位置会存储的代表空格统计到的个数,然后32这个位置数按字符输出的话就是一个空格键,理解这个关键程序也就不难啦;
  #include <stdio.h> //调用stdio库
  #include <string.h>//调用string库
  #define MAX_LEN 1000 //宏定义字符存储空间的长度
  char s[MAX_LEN];//定义字符存储空间
  int num[256] = { 0 }, first[256];//num存储每个字符的个数,first存储每个字符第一次出现的位置,在后面次数相同时,作为先输出用。
  //根据统计次数多的先排,次数相等的最先出现的先排
  int lessThan(char i, char j) { //传入两个字符的ASCII码
   if (num[i] != num[j]) //判断两个字符统计的资料是否相等
   return num[i] < num[j];//不相等,返回两个统计数比较
   return first[i] > first[j]; //次数相等,看先那个字符最先出现
  }
  int main() {
   int i, j, k; //定义循环临时变量
   char tmp; //定义临时交换变量
   fgets(s, MAX_LEN, stdin); //等待用户输入字符串
   if (s[strlen(s) - 1] == '\n' || s[strlen(s) - 1] == '\r')
   s[strlen(s) - 1] = '\0'; //消除输入字符串中的回车或换行符
   for (i = 0; s[i] != '\0'; i++) {
   num[s[i]]++; //统计字符出现的资料
   if (num[s[i]] == 1) //存储字符第一次出现的位置
   first[s[i]] = i;
   }
   for (i = 0; s[i] != '\0'; i++)
   for (j = i + 1; s[j] != '\0'; j++)
   if (lessThan(s[i], s[j])) {//根据lesThan判断这个字符是否要调换位置重新排序
   tmp = s[i];
   s[i] = s[j];
   s[j] = tmp;
   }
   for (i = k = 0; s[i] != '\0'; i++) //准备输出
   if (i == 0 || s[i] != s[i - 1]) {
   k++;
   printf("%c-%d%c", s[i], num[s[i]],
   s[i + 1] == '\0' || k % 4 == 0 ? '\n' : ' ');
   }
   return 0;
  }

网友回答

fewer than 和 less than 都是少于。
  “少于”的英语:
  1、 fewer than
  Fewer than 10 percent of applicants are granted political asylum by German 
  courts. 
  申请政治庇护者中,只有不到10%获得了德国法庭批准。
  2、less than 
  The marriage had lasted for less than two years 
  这段婚姻维持了不到两年。
  扩展资料
  fewer than和less than的区别在于搭配:
  1、在“基数词+表示具体的人或物的名词”结构前面通常使用fewer than
  There were fewer than 20 applications. 
  申请表不到20份。
  2、在“基数词+表示时间、距离、金额的计量名词(如hour,mile, dollar等)
  The whole of Switzerland has less than six million inhabitants. 
  整个瑞士的居民不足六百万。
以上问题属网友观点,不代表本站立场,仅供参考!