Dostałem dużo cennych wskazówek ale póki co wcisnąłem nogę w drzwi ;-) bazując na tym co wiem.
Ale my nie dostaliśmy żadnych na temat tego co próbujesz osiągnąć.
- Po kiego ci tablica z cyframi na dodatek typu
int
- Czemu nie możesz użyć normalnego
string
a?
- Czemu skoro i tak potrzebujesz słownie (wyczytałem z nazw zmiennych) nie użyjesz gotowej konwersji np https://en.cppreference.com/w/cpp/string/basic_string/to_string ?
- Po kiego w ogóle próbujesz używać
new/delete
? (to jest nie zalecane w c++)
- Po kiego używasz zmienne globalne? (mogą być użyte jako stałe, nawet jako stałe wczytywane z pliku
ini/xml/json/itp
to już brzydkie rozwiązania)
Mam nieodparte wrażenie że próbujesz stworzyć projekt pokazujący jak nie należy podchodzić do programowania.
Poniżej przykład funkcji Słownie
w delphi, zauważ że nawet nie ma potrzeby przekształcać całości na cyfry.
function InWordPL(Val:Int64):String;
var S,Sadd:String;
var I,N,N1,N2,N3:Word;
const Range:array[0..3,0..2]of String=
(
('','',''),
('tysiąc ','tysiące ','tysięcy '),
('milion ','miliony ','milionów '),
('miliard ','miliardy ','miliardów ')
);
const Digits:array[0..3,0..9]of String=
(
('','jeden ','dwa ','trzy ','cztery ','pięć ','sześć ','siedem ','osiem ','dziewięć '),
('dziesięć ','jedenaście ','dwanaście ','trzynaście ','czternaście ','piętnaście ','szesnaście ','siedemnaście ','osiemnaście ','dziewiętnaście '),
('','','dwadzieścia ','trzydzieści ','czterdzieści ','pięćdziesiąt ','sześćdziesiąt ','siedemdziesiąt ','osiemdziesiąt ','dziewięćdziesiąt '),
('','sto ','dwieście ','trzysta ','czterysta ','pięćset ','sześćset ','siedemset ','osiemset ','dziewięćset ')
);
begin
if Val<0 then
begin
Result:='- ';
Val:=-Val;
end
else SetLength(Result,0);
if Val=0 then Result:='Zero '
else
begin
I:=0;
while Val>0 do
begin
N:=(Val)mod(1000);
N1:=(Val)mod(10);
N2:=(Val)div(10)mod(10);
N3:=(Val)div(100)mod(10);
Val:=(Val)div(1000);
Sadd:=Digits[3,N3];
if N2=1 then Sadd:=Sadd+Digits[1,N1] else Sadd:=Sadd+Digits[2,N2]+Digits[0,N1];
if N>0 then
begin
if N2=1 then Sadd:=Sadd+Range[I,2]
else if (2<=N1)and(N1<=4) then Sadd:=Sadd+Range[I,1]
else if N1<>1 then Sadd:=Sadd+Range[I,2]
else if (N2=0)and(N3=0) then Sadd:=Sadd+Range[I,0]
else Sadd:=Sadd+Range[I,2];
end;
Inc(I);
S:=Sadd+S;
end;
Result:=Result+S;
end;
end;