0

Is there an easy way to create ordinals in C#? に多少関連するソリューションを探しています。、しかし逆。

次の変換を自動化したいと思います。

最初 --> 1番目

セカンド --> セカンド

サード --> サード

99 番目 --> 99 番目など。

4

3 に答える 3

1

一般に、これは、数字の単語の辞書を使用して数字を解析することによって最も簡単に実行できます。ルールは次のとおりです。

  • 文字列を小文字に変換し、スペース、コンマ、および/またはダッシュに基づいて文字列を単語に分割します。空のエントリ (隣接する複数の区切り文字に対応) を削除します。

  • 文字列の最初の単語から始めます。これは、最初の 19 個の自然数 (「1」、「2」、「3」、...、「17」、「18」、「19」) のいずれかに対応する単語、または「 20」から「90」。序数を考慮する必要があるため、探している数字の単語は、前の形式と、"st"、"nd"、"rd"、または "th" で終わる形式の両方であることに注意してください。違いは、任意の単語の序数バージョンが表示された場合は完了している必要があるということです。いずれにせよ、数詞とそれに対応する値を含む事前定義で数詞を検索した後 (そしてできれば値を見つけた後)、Dictionary<string, int>この数を「実際の値」として覚えておいてください。

  • 次に、単語の繰り返しを開始します。次の単語もこれらの自然数の単語の 1 つである場合、それを「作業値」の値に追加しますが、「現在の合計」には値を追加しないでください。

  • 次の単語が桁数の指標 (100、1000、100 万、10 億、100 兆) の場合は、作業値に桁数を掛けます。次に、次の単語を「のぞいて」ください。それが OOM 単語でもある場合 (主要な単語は「10 万」ですが、イギリス英語では、「10 億」として知られているものの同義語として「1000 万」も許可されており、いくつかの非常に大きな数は、小さな OOM の繰り返しで言うことができます) 「ミリオンミリオンミリオン」のように)、持っているものを保持して繰り返し続けます。それ以外の場合は、現在の作業値を現在の合計に追加し、先に進む前に作業値をゼロにします。

  • 数字の文字列の最後の単語に到達したら、実行中の値にあるものを現在の合計に追加します。

現在の合計は、解析した単語数の数値表現になりました。再び数値の序数にするには、単純にこの数値に対して ToString を呼び出し、1 の位の値が '1' の場合は "st" を追加し、'2' の場合は 'nd' を追加し、'3' の場合は 'rd' を追加します。それ以外の数字の場合は「th」。

于 2012-02-23T18:07:49.293 に答える
0

英語では、特別な用語が付いている数字は1〜20で、10の倍数は90(20、30、40など)です。たとえば、「40」(特に「40」ではないので厄介です)や「19」などです。

これらの特殊なケースを解析する場合、他のすべては通常、100未満の数値、乗数、最後の式の前のオプションの「and」、およびフレーズ全体の後の「th」として表されます。例:「((Four)(Hundred))[および](50)(6)[th]"。

于 2012-02-23T17:49:57.963 に答える
0

私の意見では、最も簡単な方法は、1 桁目と 2 桁目の配列を (通常/非逆変換のコードを使用して) 生成し、その配列を検索することです。

100 の後には、「百、千」などを追加するだけです。

ヒント: 単語を最後から次の方向に読んでください。

<---------   <----------
one hundred twenty first
  4       3      2     1
于 2012-02-23T17:52:25.953 に答える