8
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

今年イチ!お勧めしたいテクニック by ゆめみ feat.やめ太郎Advent Calendar 2019

Day 25

お手軽!英語の序数をつける最も簡単な判定法!?

Last updated at Posted at 2019-12-24

まえがき

メリークリスマス!そしてハッピーバースデー私!自称やめ太郎先生の大ファンSeitenです!
今回は、使う機会があるようでないようでありそうなテクニック、"英語の序数をつける"コードを紹介します!

英語の序数のルール

  1. 下1桁が1の時はst、2の時はnd、3の時はrd、それ以外はthをつける。
  2. 十の位が1の時は1のルールを無視し、thをつける。

このルールに沿って、お手軽に英語の序数をつけた文字列を返す関数を実装してみます。

ordinal.cpp
std::string GetOrdinalNumber(unsigned long long num)
{
    std::string res = std::to_string(num);

    if (num / 10 % 10 == 1) res += "th"
    else
    {
        switch (num % 10)
        {
        case 1:
            res += "st";
            break;

        case 2:
            res += "nd";
            break;

        case 3:
            res += "rd";
            break;

        default:
            res += "th";
            break;
        }
    }

    return res;
} 
ordinal.js
function GetOrdinalNumber(num)
{
    if (IsNaN(num) || !IsFinite(num) || num < 0) return "";

    let res = num.toString(10);

    if (num / 10 % 10 === 1) res += "th";
    else
    {
         switch (num % 10)
         {
         case 1:
             res += "st";
             break;

         case 2:
             res += "nd";
             break;

         case 3:
             res += "rd";
             break;

         default:
             res += "th";
             break;
         }
    }

    return res;
}
ordinal.cs
public string GetOrdinalNumber(ulong num)
{
    string res = num.ToString();

    if (num / 10 % 10 == 1) res += "th";
    else
    {
        switch (num % 10)
        {
            case 1:
                res += "st";
                break;

            case 2:
                res += "nd";
                break;

            case 3:
                res += "rd";
                break;

            default:
                res += "th";
                break;
        }
    }

    return res;
}
ordinal.vb
Public Function GetOrdinalNumber(ByVal num As ULong) As String
    Dim res As String = num.ToString

    If ((num \ 10) Mod 10) = 1 Then
        res &= "th"
    Else
        Select Case num Mod 10
            Case 1
                res &= "st"
            Case 2
                res &= "nd"
            Case 3
                res &= "rd"
            Case Else
                res &= "th"
        End Select
    End If

    Return res
End Function
ordinal.java
public String GetOrdinalNumber(long num)
{
    if (num < 0) return ""

    String res = Long.toString(num);

    if (num / 10 % 10 == 1) res += "th";
    else
    {
        switch (num % 10)
        {
            case 1:
                res += "st";
                break;

            case 2:
                res += "nd";
                break;

            case 3:
                res += "rd";
                break;

            default:
                res += "th";
                break;
        }
    }

    return res;
}

……で、何に使うの?

わかりません!
ただし、筆者は音楽ゲームでステージ表示するのに使いました。

ライセンス

Apache License 2.0にします。
作者名は「Seiten Minagawa」でお願いします。

8
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?