Следующая функция работает для 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 включительно. Если вы хотите (возможно, но не обязательно) сырую скорость, вы можете попробовать:
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];
}
Вы заметите, что я проверяю границы там, хотя и закомментирован. Если есть даже малейшая вероятность того, что неожиданное значение будет передано, возможно, вы захотите раскомментировать эти строки.
Просто имейте в виду, что с сегодняшними компиляторами наивные предположения о том, что быстрее в языке высокого уровня, могут быть неверными: измерять, не угадывать.