C 如何为一个月中的几天提供后缀?
我需要一个函数来在显示文本时返回天数后缀,如“C 如何为一个月中的几天提供后缀?,c,date,C,Date,我需要一个函数来在显示文本时返回天数后缀,如“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"; cas
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";
}
char*makeDaySuffix(无符号整数天){
//如果((第1天)|(第31天)返回“”;
开关(日){
案例1:案例21:案例31:返回“st”;
案例2:案例22:返回“nd”;
案例3:案例23:返回“rd”;
}
返回“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];
}
char*makeDaySuffix(无符号整数天){
静态常量字符*常量后缀[]={
“st”、“nd”、“rd”、“th”、“th”、“th”、“th”、“th”、“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”、“th”、“th”
“圣”
};
//如果((第1天)|(第31天)返回“”;
返回后缀[第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];
}
static const char*daySuffixLookup[]={“th”、“st”、“nd”、“rd”、“th”,
“th”、“th”、“th”、“th”、“th”、“th”};
常量字符*日后缀(整数n)
{
如果(n%100>=11&&n%100const char*getDaySuffix(int-day){
如果(第%100天>10天和第%100天<14天)
返回“th”;
开关(第%10天){
案例1:返回“st”;
案例2:返回“nd”;
案例3:返回“rd”;
默认值:返回“th”;
};
}
这一个适用于任何数字,而不仅仅是1-31。请看我的问题:(这不是C#1)
小结:看来还没有办法,因为你的要求有限,你可以只使用一个简单的功能,就像上面贴的一样。这是一个很好的解决方案-介意把你的手转向国际化版本吗?附言。我知道这不是原始问题的一部分,但这是一个有趣的练习。哈哈,国际化版本应该是com完全不同的是,查找表可能是实现它的最佳方式。如果((day%100)/10==1)返回“th”
,则第一个检查也可以是。
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";
};
}