преобразование числа 123 в строку сто двадцать три
От: serb Россия  
Дата: 25.07.03 14:31
Оценка:
Занимался ли кто-нибудь преобразованием чисел (цифр) в их строковое представление
те 10-десять или 230 -двести тридцать
Если можно напишите ссылку на какой-нибудь компонет класс и тд
Спасибо


25.07.03 18:39: ?????????? ??????????? ?? 'C/C++' — ПК
Re: преобразование числа 123 в строку сто двадцать три
От: Ed.ward Россия  
Дата: 25.07.03 14:38
Оценка: 2 (1)
Здравствуйте, 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 >>
Re: преобразование числа 123 в строку сто двадцать три
От: Аноним  
Дата: 25.07.03 14:40
Оценка: 1 (1)
Здравствуйте, serb, Вы писали:

S>Занимался ли кто-нибудь преобразованием чисел (цифр) в их строковое представление

S>те 10-десять или 230 -двести тридцать
S> Если можно напишите ссылку на какой-нибудь компонет класс и тд
S>Спасибо


Это уже банально и не интересно...
Вот преобразование наоборот было бы интереснее
Re[2]: преобразование числа 123 в строку сто двадцать три
От: Flamer Кипр http://users.livejournal.com/_flamer_/
Дата: 25.07.03 14:45
Оценка: :)
Здравствуйте, Аноним, Вы писали:

[]

А>Это уже банально и не интересно...

А>Вот преобразование наоборот было бы интереснее

Вот, набросал


int number = 123;

if(123 == number)
 {
   ::MessageBox(NULL,"Сто двадцать три", NULL, MB_OK);
 }


Re[3]: преобразование числа 123 в строку сто двадцать три
От: bkat  
Дата: 25.07.03 14:49
Оценка:
Здравствуйте, Flamer, Вы писали:

F>Здравствуйте, Аноним, Вы писали:


F>[]


А>>Это уже банально и не интересно...

А>>Вот преобразование наоборот было бы интереснее

F>Вот, набросал



F>
F>int number = 123;

F>if(123 == number)
F> {
F>   ::MessageBox(NULL,"Сто двадцать три", NULL, MB_OK);
F> }
F>


F>



Не понял... А как это работает?
Я имел ввиду как из "Сто двадцать три" получить 123?
Re[4]: преобразование числа 123 в строку сто двадцать три
От: Flamer Кипр http://users.livejournal.com/_flamer_/
Дата: 25.07.03 14:58
Оценка: :))
Здравствуйте, bkat, Вы писали:

[]

B>Не понял... А как это работает?

B>Я имел ввиду как из "Сто двадцать три" получить 123?

Ааа... Ну тогда вот:


char* stodvadcattri = "Сто двадцать три";
int result = -1;

if(!stricmp(stodvadcattri,"Сто двадцать три"))
 {
    result = 123;
  ::MessageBox(NULL,"Таки да!", NULL, MB_OK);
 }




З.Ы. А если серьезно, то задача интересная...
Re[5]: преобразование числа 123 в строку сто двадцать три
От: bkat  
Дата: 25.07.03 15:01
Оценка:
Здравствуйте, Flamer, Вы писали:

F>З.Ы. А если серьезно, то задача интересная...


Я тоже так думаю. Может даже решена кем-то
Re[2]: преобразование числа 123 в строку сто двадцать три
От: serb Россия  
Дата: 25.07.03 15:11
Оценка:
Здравствуйте, Ed.ward, Вы писали:

EW>Здравствуйте, serb, Вы писали:


S>>Занимался ли кто-нибудь преобразованием чисел (цифр) в их строковое представление

S>>те 10-десять или 230 -двести тридцать
S>> Если можно напишите ссылку на какой-нибудь компонет класс и тд
S>>Спасибо

EW>поиском надо пользоваться



Спасибо за помощь
Re[6]: преобразование числа 123 в строку сто двадцать три
От: GarryIV  
Дата: 27.07.03 14:20
Оценка: 2 (1)
Здравствуйте, 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
WBR, Igor Evgrafov
Re[7]: преобразование числа 123 в строку сто двадцать три
От: bkat  
Дата: 27.07.03 14:48
Оценка:
Тебе лучше это в "Этюды для программистов" продублировать.
Туда эту задачку поместили...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.