I need a function to return a suffix for days when displaying text like the "th
" in "Wednesday June 5th, 2008
".
It only need work for the numbers 1 through 31 (no error checking required) and English.
I need a function to return a suffix for days when displaying text like the "th
" in "Wednesday June 5th, 2008
".
It only need work for the numbers 1 through 31 (no error checking required) and English.
The following function works for C:
char *makeDaySuffix (int day) {
switch (day) {
case 1: case 21: case 31: return "st";
case 2: case 22: return "nd";
case 3: case 23: return "rd";
}
return "th";
}
As requested, it only works for the numbers 1 through 31 inclusive. If you want (possibly, but not necessarily) raw speed, you could try:
char *makeDaySuffix (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"
};
return suffix[day];
}
Just keep in mind that, with the compilers of today, naive assumptions about what is faster in a high-level language may not be correct: measure, don't guess.
Here is an alternative which should work for larger numbers too:
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";
};
}
This one works for any number, not just 1-31.
See my question here: http://stackoverflow.com/questions/135946/i18n-able-way-to-get-number-ordinal-in-cmfc-on-windows-1-1st-2-2nd-etc (it's not the C# one).
Summary: looks like there's no way yet, with your limited requirements you can just use a simple function like the one posted.