Wpis z mikrobloga

Przepisuje sobie programik z pewnego źródła z C++ na C (tak wiem ( ͡° ʖ̯ ͡°)) i mam pewien problem jak napisać konstruktor vector w C (a bardziej to zwykłą tablice tylko ze zmienna ilością pól). Wrzucam kod w C++.

string multiply(string num1, string num2)
{
int n1 = num1.size();
int n2 = num2.size();
if (n1 == 0 || n2 == 0)
return "0";

vector result(n1 + n2, 0);


int in1 = 0;
int i
n2 = 0;


for (int i=n1-1; i>=0; i--)
{
int carry = 0;
int n1 = num1[i] - '0';


i_n2 = 0;


for (int j=n2-1; j>=0; j--)
{

int n2 = num2[j] - '0';


int sum = n1*n2 + result[in1 + in2] + carry;


carry = sum/10;


result[in1 + in2] = sum % 10;

in2++;
}


if (carry > 0)
result[i
n1 + in2] += carry;

i
n1++;
}


int i = result.size() - 1;
while (i>=0 && result[i] == 0)
i--;


if (i == -1)
return "0";

string s = "";
while (i >= 0)
s += std::to_string(result[i--]);

#programowanie #C
  • 27
@5z7k9:

a gdzie tam widzisz klasy

Pomijając standardowy vector i string


No to #!$%@? wszystko pomin xD Przecież ten kod opiera się na metodach z tych klas, gdyby to #!$%@? to nie bedzie mial sensu. Sam sobie odpowiedziales gdzie tam są klasy.
@3424235432543: w C nie masz tak rozbudowanej standardowej biblioteki i kontenerów, takich jak vector, niestety... Musisz samemu napisać implementację vectora(i stringa zresztą też) - od zera. Musisz alokować pamięć, a w razie potrzeby realokować.
@3424235432543: Musiałbyś sobie zrobić strukturę w C, ktora by reprezentowala ten vector, miala w sobie wskaznik na int, zrobic sobie funkcje ktora na podstawie parametru tworzy strukture vector z zaalokowana pamiecia na inty i ktora je przekopiuje. I jeszcze by sie przydalu funkcje at, ktora przyjmuej dany vector i index i zwraca inta z podanej pozycji i w strukturze warto byloby sobie przechowywac jeszcze rozmiar tej tablicy
@3424235432543: dokładnie tak jak napisał @Philopolemus_Fronius, i implementacja vectora przechowującego inty oraz stringa(który niejako też jest vectorem, ale przydałaby się osobna implementacja z dodatkowymi "metodami", np. append(string *dest, string *s), appendc(string *dest, const char *s)) zajmie Ci pewnie ze 100 lub 200 linii.
@3424235432543: szczerze mówiąc, trudne jest to tylko dla osoby, która nigdy czegoś takiego nie napisała, potem jest już jedynie czasochłone - lecz schemat jest niemal zawsze ten sam.

Jeżeli boli Cię myśl o spędzeniu kilku godzin na nauce pisania vectora:
https://github.com/eteran/c-vector (wystarczy, że wkleisz vector.h do folderu projektu, no i oczywiście poprawisz swój stary kod odwołujący się do vectora z C++)
To samo, ale ze stringiem, jeśli wolisz spędzić czas