谁能帮我解释一下这个程序每一步的意思,谢谢啊,尤其是那个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.
整个瑞士的居民不足六百万。