Witam. Stworzyłem program do dodawania 2 stringów. Niby wszystko spoko, dev c++ nie zgłasza błędów ale po wpisaniu liczb wywala mi program. Po sprawdzeniu kodu w visual c++ wyskakuje mi "error C2057: expected constant expression" "error C2466: cannot allocate an array of constant size 0" oraz "error C2133: 'tab1' : unknown size". Nie wiem gdzie leży błąd ani jak go interpretować. Oto i kod źródłowy:
#include<iostream>
#include<string>
#include<sstream>
#include<algorithm>
using namespace std;
int dointa(char wliczba){ //zamienia chr na int
int zliczba = wliczba - '0';
return zliczba;
}
char dochar(int wliczba){ //zmienia int na char
char znak = wliczba + '0';
return znak;
}
string rev(string a){ //odwraca stringa
reverse( a.begin(), a.end() );
return a;
}
void natabl(string liczba, int tab[] , int wielkosc){ //"wrzuca" stringa do tablicy int
liczba = rev(liczba);
for(int i = 0; i < wielkosc; i++){
tab[i] = dointa(liczba[i]);
}
}
string nastr(int tab[], int wielkosc){ //zamienia tablice int na stringa
string suma;
for(int i = 0; i < wielkosc; i++){
suma[i] = dochar(tab[i]);
}
suma = rev(suma);
return suma;
}
int dodaj(int tab1[], int tab2[], int suma[], int wielkosc1, int wielkosc2, int licznik){ //dodaje tablice do siebie
for(int i = 0; i < licznik; i++){
if (wielkosc1 < i - 1) tab1[i] = 0;
if (wielkosc2 < i - 1) tab2[i] = 0;
suma[i] = tab1[i] + tab2[i];
}
}
int cowieksz(int l1, int l2){ //sprawdza co wieksze
if(l1 > l2) return l1 + 1;
if(l2 > l1) return l2 + 1;
}
int porzad(int sum[], int licznik){ //porzadkuje tablice int "usuwajac" liczby wieksze od 9
int tmp = 0;
for(int i = 0; i < licznik; i++){
if(sum[i] >= 10){
sum[i] = (sum[i] % 10) + tmp; //
tmp = 1;
}
else{
sum[i] = sum[i] + tmp;
tmp = 0;
if(sum[i] = 10){
tmp = 1;
sum[i] = 0;
}
}
}
if(sum[licznik - 1] = 0) return(licznik - 1); // sprawdza czy jest jedynka na początku tablicy czy zero (w celach kosmetycznych)
else{
return licznik;
}
}
string dodawanie(string liczba1, string liczba2){
string suma;
int tab1[liczba1.size()];
int tab2[liczba2.size()];
int licznik = cowieksz(liczba1.size(),liczba2.size());
int sum[licznik];
natabl(liczba1, tab1, liczba1.size());
natabl(liczba2, tab2, liczba2.size());
dodaj(tab1, tab2, sum, liczba1.size(), liczba2.size(), licznik);
licznik = porzad(sum, licznik);
cout << "Wynik to: " << nastr(sum, licznik);
}
int main(){
string liczba1;
string liczba2;
cout << "Podaj liczbe 1: ";
cin >> liczba1;
cout << "Podaj liczbe 2: ";
cin >> liczba2;
dodawanie(liczba1,liczba2);
return 0;
}
Byłbym wdzięczny za pomoc początkującemu programiście :)