Занимался ли кто-нибудь преобразованием чисел (цифр) в их строковое представление
те 10-десять или 230 -двести тридцать
Если можно напишите ссылку на какой-нибудь компонет класс и тд
Спасибо
25.07.03 18:39: ?????????? ??????????? ?? 'C/C++' — ПК
Здравствуйте, serb, Вы писали:
S>Занимался ли кто-нибудь преобразованием чисел (цифр) в их строковое представление
S>те 10-десять или 230 -двести тридцать
S> Если можно напишите ссылку на какой-нибудь компонет класс и тд
S>Спасибо
поиском надо пользоваться
http://www.rsdn.ru/article/default.asp?files/dotnet/RusNumber.xmlАвтор(ы): Виталий Брусенцев
Дата: 22.07.2002
Ed.ward
... << RSDN@Home 1.0 beta 7a >>
Здравствуйте, serb, Вы писали:
S>Занимался ли кто-нибудь преобразованием чисел (цифр) в их строковое представление
S>те 10-десять или 230 -двести тридцать
S> Если можно напишите ссылку на какой-нибудь компонет класс и тд
S>Спасибо
Это уже банально и не интересно...
Вот преобразование наоборот было бы интереснее
Здравствуйте, Аноним, Вы писали:
[]
А>Это уже банально и не интересно...
А>Вот преобразование наоборот было бы интереснее
Вот, набросал
int number = 123;
if(123 == number)
{
::MessageBox(NULL,"Сто двадцать три", NULL, MB_OK);
}
Здравствуйте, Flamer, Вы писали:
F>Здравствуйте, Аноним, Вы писали:
F>[]
А>>Это уже банально и не интересно...
А>>Вот преобразование наоборот было бы интереснее
F>Вот, набросал
F>F>int number = 123;
F>if(123 == number)
F> {
F> ::MessageBox(NULL,"Сто двадцать три", NULL, MB_OK);
F> }
F>
F>
Не понял... А как это работает?
Я имел ввиду как из "Сто двадцать три" получить 123?
Здравствуйте, bkat, Вы писали:
[]
B>Не понял... А как это работает?
B>Я имел ввиду как из "Сто двадцать три" получить 123?
Ааа...

Ну тогда вот:
char* stodvadcattri = "Сто двадцать три";
int result = -1;
if(!stricmp(stodvadcattri,"Сто двадцать три"))
{
result = 123;
::MessageBox(NULL,"Таки да!", NULL, MB_OK);
}
З.Ы. А если серьезно, то задача интересная...
Здравствуйте, Flamer, Вы писали:
F>З.Ы. А если серьезно, то задача интересная...
Я тоже так думаю. Может даже решена кем-то
Здравствуйте, bkat, Вы писали:
B>Здравствуйте, Flamer, Вы писали:
F>>З.Ы. А если серьезно, то задача интересная...
B>Я тоже так думаю. Может даже решена кем-то
Вот посидел полчасика
Сильно не тестировал , но вроде как работает...
Проверка строки на правильность с отсутствует — то есть с синтаксически правильными строками работать должно. С неправильными как повезет
Option Explicit
Private sot As New Collection
Private des As New Collection
Private ed As New Collection
Private mult As New Collection
Private Sub Command1_Click()
Dim nValue As Long
nValue = TextToNumber(TextToArray(Text1.text))
MsgBox nValue
End Sub
Private Sub Form_Load()
With ed
.Add 1, "один"
.Add 1, "одна"
.Add 2, "два"
.Add 2, "две"
.Add 3, "три"
.Add 4, "четыре"
.Add 5, "пять"
.Add 6, "шесть"
.Add 7, "семь"
.Add 8, "восемь"
.Add 9, "девять"
.Add 10, "десять"
.Add 11, "одинадцать"
.Add 12, "двенадцать"
.Add 13, "тринадцать"
.Add 14, "четырнадцать"
.Add 15, "пяттнадцать"
.Add 16, "шестнадцать"
.Add 17, "семнадцать"
.Add 18, "восемнадцать"
.Add 19, "девятнадцать"
End With
With des
.Add 20, "двадцать"
.Add 30, "тридцать"
.Add 40, "сорок"
.Add 50, "пятьдесят"
.Add 60, "шестьдесят"
.Add 70, "семдесят"
.Add 80, "восемьдесят"
.Add 90, "девяносто"
End With
With sot
.Add 100, "сто"
.Add 200, "двести"
.Add 300, "триста"
.Add 400, "четыреста"
.Add 500, "пятьсот"
.Add 600, "шестьсот"
.Add 700, "семьсот"
.Add 800, "восемьсот"
.Add 900, "девятьсот"
End With
With mult
.Add 1000, "тысяча"
.Add 1000, "тысячи"
.Add 1000, "тысяч"
.Add 1000000, "миллион"
.Add 1000000, "миллиона"
.Add 1000000, "миллионов"
.Add 1000000000, "миллиард"
.Add 1000000000, "миллиарда"
.Add 1000000000, "миллиардов"
End With
End Sub
Private Function TextToNumber(text As Variant) As Long
Dim nSot As Long
Dim nDes As Long
Dim nEd As Long
Dim nMult As Long
Dim newPos As Long
Dim oldPos As Long
Dim nValue As Long
Dim nWords As Long
newPos = 0
nWords = UBound(text)
nValue = 0
Do While newPos <= nWords
nMult = 1
oldPos = newPos
nSot = GetElem(sot, text(newPos))
If nSot <> 0 Then
newPos = newPos + 1
If newPos > nWords Then GoTo addnum
End If
nDes = GetElem(des, text(newPos))
If nDes <> 0 Then
newPos = newPos + 1
If newPos > nWords Then GoTo addnum
End If
nEd = GetElem(ed, text(newPos))
If nEd <> 0 Then
newPos = newPos + 1
If newPos > nWords Then GoTo addnum
End If
nMult = GetElem(mult, text(newPos))
If nMult = 0 Then
nValue = -1
Exit Do
Else
newPos = newPos + 1
End If
addnum:
If newPos > oldPos Then
nValue = nValue + (nSot + nDes + nEd) * nMult
Else
nValue = -1
Exit Do
End If
Loop
TextToNumber = nValue
End Function
Private Function TextToArray(text As String) As Variant
Dim aTmp() As String
aTmp = Split(text, " ")
TextToArray = aTmp
End Function
Private Function GetElem(coll As Collection, key As Variant) As Long
On Error Resume Next
GetElem = 0
GetElem = coll.Item(key)
End Function
Тебе лучше это в "Этюды для программистов" продублировать.
Туда эту задачку поместили...