有沒有人知道一種方法將諸如「第一」,「第十」和「第一百」之類的單詞轉換爲它們的數字等價物?是否有一種將序數字串轉換爲其匹配數值的簡單方法?
樣品: 「第一」 - > 1, 「第二」 - > 2, 「第十」 - > 10, 「百」 - > 100
任何算法就足夠了,但我正在寫這在C#中。
編輯
這是不漂亮,只能用一個字工作在時間,但它適合我的目的。也許有人可以改進它,但我沒時間了。
public static int GetNumberFromOrdinalString(string inputString)
{
string[] ordinalNumberWords = { "", "first", "second", "third", "fourth", "fifth", "sixth", "seventh", "eighth", "ninth", "tenth", "eleventh", "twelfth", "thirteenth", "fourteenth", "fifteenth", "sixteenth", "seventeenth", "eighteenth", "nineteenth", "twentieth" };
string[] ordinalNumberWordsTens = { "", "tenth", "twentieth", "thirtieth", "fortieth", "fiftieth", "sixtieth", "seventieth", "eightieth", "ninetieth" };
string[] ordinalNumberWordsExtended = {"hundredth", "thousandth", "millionth", "billionth" };
if (inputString.IsNullOrEmpty() || inputString.Length < 5 || inputString.Contains(" ")) return 0;
if (ordinalNumberWords.Contains(inputString) || ordinalNumberWordsTens.Contains(inputString))
{
var outputMultiplier = ordinalNumberWords.Contains(inputString) ? 1 : 10;
var arrayToCheck = ordinalNumberWords.Contains(inputString) ? ordinalNumberWords : ordinalNumberWordsTens;
// Use the loop counter to get our output integer.
for (int x = 0; x < arrayToCheck.Count(); x++)
{
if (arrayToCheck[x] == inputString)
{
return x * outputMultiplier;
}
}
}
// Check if the number is one of our extended numbers and return the appropriate value.
if (ordinalNumberWordsExtended.Contains(inputString))
{
return inputString == ordinalNumberWordsExtended[0] ? 100 : inputString == ordinalNumberWordsExtended[1] ? 1000 : inputString == ordinalNumberWordsExtended[2] ? 1000000 : 1000000000;
}
return 0;
}
您的意思是,將類似:'231'到'1 + 30 + 200'? – Ruel 2010-09-29 01:55:18
@Ruel,不,我認爲OP的意思是1 - >「第一」,10 - >「第十」,100 - >「第一百」 – 2010-09-29 01:59:31
你想用這個多高? – BlackICE 2010-09-29 02:02:41