如何提供一个月中几天的后缀?
时间:2020-03-06 15:03:41 来源:igfitidea点击:
当显示" 2008年6月5日星期三"中的" th"之类的文本时,我需要一个函数返回几天的后缀。
它只需要处理数字1到31(不需要进行错误检查)和英语。
解决方案
以下函数适用于C:
char *makeDaySuffix (unsigned int day) { //if ((day < 1) || (day > 31)) return ""; switch (day) { case 1: case 21: case 31: return "st"; case 2: case 22: return "nd"; case 3: case 23: return "rd"; } return "th"; }
根据要求,它仅适用于数字1到31(含1和31)。如果我们想要(可能但不一定)原始速度,则可以尝试:
char *makeDaySuffix (unsigned int day) { static const char * const suffix[] = { "st","nd","rd","th","th","th","th","th","th","th", "th","th","th","th","th","th","th","th","th","th" "st","nd","rd","th","th","th","th","th","th","th" "st" }; //if ((day < 1) || (day > 31)) return ""; return suffix[day-1]; }
我们会注意到,尽管已注释掉,但我还是在其中检查。如果极有可能会传入意外值,则可能要取消注释这些行。
请记住,对于当今的编译器,对于高级语言中更快的内容的幼稚假设可能是不正确的:测量,不要猜测。
这是一个替代方法,也应该适用于更大的数字:
static const char *daySuffixLookup[] = { "th","st","nd","rd","th", "th","th","th","th","th" }; const char *daySuffix(int n) { if(n % 100 >= 11 && n % 100 <= 13) return "th"; return daySuffixLookup[n % 10]; }
const char *getDaySuffix(int day) { if (day%100 > 10 && day%100 < 14) return "th"; switch (day%10) { case 1: return "st"; case 2: return "nd"; case 3: return "rd"; default: return "th"; }; }
此数字适用于任何数字,而不仅限于1-31.
在这里看到我的问题:如何将基数转换为序数(不是锥体)。
简介:似乎还没有办法,由于需求有限,我们只能使用一个简单的功能,例如发布的功能。