Народ, помогите плз решить задачу. Даётся текстовая строка представляющая собой правильную запись целого числа, напр "одиннадцать" .на ввод строки должно выводиться её числовое значение т.е. если вводится "сто двадцать четыре" должно вывестись 124. Загонять case на каждое числительное мне как-то не особо :-[
sandman
1.12.2003 12:05
давно ничего не писал, но может такая бредовая идея подойдет:
создать 2 массива, в одном из которых будут строковые знаечния (один,два...десять...) а в другом соответсвующие числа, с такими же индексами. example: array['один','два',итакдалее] of string array[1,2,...] of integer далее разбить входящую строку на слова и анализировать каждое слово, просматривая массив строк и на сопоставляя соответствующие элементы числового массива, складывая их в последствии... p.s. что-нибудь из этого понял? ;)
fms
1.12.2003 14:15
есть решение наоборот. из числа в текст. т.е. 124="сто двадцать четыре"
если нужно могу выложить.
APAL
1.12.2003 14:45
Может поможет:
Код
Function GetNumFromSt(Sc : String) : LongInt; Var Cs : String; N1s,N2s,Ks : Byte; ddd,iii : Integer; Begin N1s:=0; Ks:=0; While (N1s=0) and (Ks<=Length(Sc)) do Begin Inc(Ks); If (Sc[Ks]>='0') and (Sc[Ks]<='9') then N1s:=Ks; End; If N1s=0 then Begin GetNumFromSt:=0; Exit; End; N2s:=N1s; While (Sc[N2s]>='0') and (Sc[N2s]<='9') do Inc(N2s); Cs:=''; Dec(N2s); For Ks:=N1s to N2s do Cs:=Cs+Sc[Ks]; Val(Cs,ddd,iii); GetNumFromSt:=ddd; End;
UtaH
1.12.2003 16:59
Sandman, а если там числа до 999999999?
fms
1.12.2003 21:38
ну не надо дак не надо.. ;D
UtaH
2.12.2003 8:35
FMS,выложи плиз может поможет ;D
fms
2.12.2003 22:46
знаете.. только там на С. хотя какая разница? переделать можно.. ;D
#include <stdio.h> #include <string.h>
#define DG_POWER 6 // Энто допустимая степень числа 1000 для __int64: // При необходимости его легко увеличить, struct s_POWER { // дополнив массив 'a_power' и заменив int sex; // тип __int64 на более серьезный char *one; char *four; char *many; } a_power[]= { {0,NULL ,NULL ,NULL }, // 1 {1,"тысяча " ,"тысячи " ,"тысяч " }, // 2 {0,"миллион " ,"миллиона " ,"миллионов " }, // 3 {0,"миллиард " ,"миллиарда " ,"миллиардов " }, // 4 {0,"триллион " ,"триллиона " ,"триллионов " }, // 5 {0,"квадриллион ","квадриллиона ","квадриллионов "}, // 6 {0,"квинтиллион ","квинтиллиона ","квинтиллионов "} // 7 };