Von einem Integer-Array zu einem Integer



  • Hallo nochmal,

    diesmal habe ich ein Programmier-Problem.
    Ich habe ein Integer Array z.B. mit:
    a[0]= 3
    a[1]= 1
    a[2]= 2

    gibt es eine Möglichkeit diese drei Zahlen auszulesen und hintereinander in einem Integerwert zusammenzufassen 😕
    Dass ich z.B. den Integer int = 312 habe???

    Vielen Dank nochmal 🙂



  • int total = 0;
    for (std::size_t i = 0; i < array_size; ++i)
    {
        total += array[i] * std::pow(10, i);
    }
    

    (ungetestet)



  • #include <iostream>
    #include <cmath>
    
    int MakeInt(const char *arr, std::size_t size)
    {
    	int result = 0;
    
    	for (std::size_t i = 0; i < size; ++i)
    	{
    		result += arr[i] * (std::pow(10.0, static_cast<int>(size - i - 1)));
    	}
    
    	return result;
    }
    
    int main()
    {
    	char a[3];
    
    	a[0] = 3;
    	a[1] = 1;
    	a[2] = 2;
    
    	std::cout << MakeInt(a, sizeof(a)) << std::endl;
    
    	return 0;
    }
    


  • Nathan schrieb:

    std::pow(10, i);
    

    Immer diese Anfänger hier. Das ist langsam und kann zu Rundungsfehlern führen. Davon abgesehen sind die Ziffern in der falschen Reihenfolge.

    long long total = 0;
    for (auto digit : array)
      total = 10*total + digit;
    


  • Vielen Dank für die schnellen Antworten. Das hilft mi schon mal weiter 🙂



  • also funktionieren tut es... allerdings bin ich wohl doch zu viel Anfänger um nachvollziehen zu können was genau hier

    result += arr[i] * (std::pow(10.0, static_cast<int>(size - i - 1)));

    passiert...

    google hat mir zwar verraten, dass pow eine Potenzierung bedeutet und static_cast wohl eine convertierung macht
    aber warum funktioniert die Zeile denn und macht, was sie macht 😕



  • arr[i] * (std::pow(10.0, static_cast<int>(size - i - 1)));
    

    macht
    arri10sizei1arr_i \cdot 10^{size-i-1}
    Was der Cast da soll ist mir auch nicht ganz klar...



  • Der Cast ist notwendig, da std::pow keine Templatefunktion ist und daher nicht alle numerischen Typen abdeckt.



  • Seit C++11 schon.



  • Danke euch 🙂


Log in to reply