Comment puis-je fournir un suffixe pour les jours du mois?

J’ai besoin d’une fonction pour renvoyer un suffixe pendant des jours lors de l’affichage d’un texte comme le ” th ” dans ” Wednesday June 5th, 2008 “.

Il ne faut travailler que pour les numéros 1 à 31 (aucune vérification d’erreur requirejse) et en anglais.

Voici une alternative qui devrait également fonctionner pour des nombres plus importants:

 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]; } 

La fonction suivante fonctionne pour 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"; } 

Comme demandé, cela ne fonctionne que pour les numéros 1 à 31 inclus. Si vous voulez (éventuellement, mais pas nécessairement) la vitesse brute, vous pouvez essayer:

 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]; } 

Vous remarquerez que j’ai des limites à vérifier ici bien commenté. S’il existe la moindre possibilité qu’une valeur inattendue soit transmise, vous voudrez probablement décommenter ces lignes.

Gardez simplement à l’esprit qu’avec les compilateurs d’aujourd’hui, les hypothèses naïves sur ce qui est plus rapide dans un langage de haut niveau peuvent ne pas être correctes: mesurer, ne devinez pas.

 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"; }; } 

Celui-ci fonctionne pour n'importe quel nombre, pas seulement 1-31.

Voir ma question ici: Comment convertir des nombres cardinaux en nombres ordinaux (ce n’est pas le C #).

Résumé: on dirait qu’il n’ya pas encore de solution; avec vos exigences limitées, vous pouvez utiliser une simple fonction telle que celle publiée.