Inhalt von Testende



  • Hallo,

    ich will daß ein Programm bei der Zahl 23 2 x 3 multipliziert u.s.w.
    Dabei versuche ich die Zahl zu zerlegen mit length

    string str (Testende);
    cout << "The length of str is " << str.length() << " characters.\n";

    Er gibt mir immer folgende MELDUNG:

    main.cpp:23: error: initializing argument 1 of 'std::basic_string<_CharT, _Traits, _Alloc>::basic_string(const _CharT*, const _Alloc&) [with _CharT = char, _Traits = std::char_traits<char>, _Alloc = std::allocator<char>]'
    main.cpp:23: error: invalid conversion from 'int' to 'const char*'

    IRGENDWIE MUß ICH DIE VARIABLEN VERÄNDERN.

    DANKE FÜR DEN TIPP



  • aber nicht den ganzen geheimen code zeigen 🙄



  • #include <iostream>
    #include <string>
    using namespace std;
    
    int quot;
    int Testbeginn = 1;
    int Testende = 100;
    int Zehler=0;
    int TS;
    
    int main ()
    {
     cout<< "Testbeginn ";
    cin>>Testbeginn;
    cout<<"Testende";
    cin>>Testende;
    
    /*ZahlAuseinanernehmer*/
     string str (Testende);
      cout << "The length of str is " << str.length() << " characters.\n";
    
    for(int i=1;i<=Testende/+1;i=i+1)
    	{
    	quot=Testende/i;
    		if(0==Testende%i)
    		{
    		Zehler=Zehler+1;
    		cout<<quot<<" ";
    		TS=TS+quot;
    		}		
    	}		
    cout<<" als Teiler der Zahl. "<<Testende<<" hat also "<<Zehler<<" Teiler. Die Summe dieser Teiler ist: "<<TS<< " =TS";
    }
    

    HIER IST ER, ER IST ABER LÄNGST NICHT FERTIG, WEIL ICH IN DAS GERÜST EINES ANDERENPROGRAMMES, WELCHE SEINE FUNKTION ERFÜLLTE, EINBAUE



  • du kannst in C++ nicht direkt int in string umwandeln , da musst du den umweg über stringstream gehen



  • Möglichkeit 1:

    #include <sstream>
    #include <string>
    
    // ...
    
        std::stringstream temp;
        temp << Testende; // ich schließe mal aus der Fehlermeldung, dass Testende ein int ist
        std::string my_str(temp.str());
    

    dann haste deine Zahl 23 in my_str als "23" und kannst damit weiterarbeiten.

    warum "Möglichkeit 1" ?
    ganz einfach, du könntest auch sprintf aus <cstdio> verwenden
    oder boost::lexical_caststd::string aus der Boost-Bibliothek.

    allerdings kannste die Zahl auch einfacher auseinander nehmen...
    also nicht erst in einen String umwandeln...

    int count_digits(int number, int base) // zählt die Ziffern einer Zahl im System mit der Basis base (10 = dezimal, 2 = dual usw.)
    {
        int digits = 0;
        if (number == 0)
            return 1;
        while (number > 0)
        {
            ++digits;
            number /= base;
        }
        return digits;
    }
    
    // ...
    
        int digits = count_digits(Testende, 10);
        int* pDigits = new int[digits];
        int temp = Testende, cur = 1;
        if (temp == 0)
            pDigits[0] = 0;
        while (temp > 0)
        {
            pDigits[digits - cur] = temp % 10;
            ++cur;
            temp /= 10;
        }
    
    // ...
    

    jetzt hast du in pDigits { 2, 3 } und kannst schön damit arbeiten^^

    MfG DrakoXP



  • Erst mal dankeschön, muß das erst verarbeiten...



  • std::cout << (int)log10((double)Testende)+1;
    


  • Bekell schrieb:

    Erst mal dankeschön, muß das erst verarbeiten...

    Nochwas zum Verarbeiten: bei capslock legt die Service-Hotline auf.


Anmelden zum Antworten