Có ai biết phương pháp chuyển đổi các từ như "đầu tiên", "thứ mười" và "một phần trăm" sang số tương đương của chúng không?Có phương pháp đơn giản nào để chuyển đổi chuỗi số thứ tự sang giá trị số phù hợp không?
Samples: "đầu tiên" -> 1, "thứ hai" -> 2, "mười" -> 10, "trăm" -> 100
Bất kỳ thuật toán sẽ đủ nhưng tôi đang viết điều này trong C#.
EDIT
Nó không đẹp và chỉ hoạt động với một từ tại một thời điểm nhưng nó phù hợp với mục đích của tôi. Có thể ai đó có thể cải thiện nó nhưng tôi hết thời gian.
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;
}
Ý của bạn là, chuyển đổi một cái gì đó như : '231' đến' 1 + 30 + 200'? – Ruel
@Ruel, không, tôi nghĩ rằng OP có nghĩa là 1 -> "đầu tiên", 10 -> "thứ mười", 100 -> "một phần trăm" –
mức độ cao bạn muốn đi với điều này? – BlackICE