Warum geht das nicht?



  • Hallo
    Frage steht oben immer wenn ich die Funktion ausführe kommt 3223434645 oder so egal was ich eingebe
    Code:

    void Umrechner::bin_in_dez()
    {
      int dezi[32];
      string bin("");
      unsigned int ergebnis;
      double j = 2;
    
      cout << "Umrechnung Binaer => Dezimal" << endl << endl;
    
      cout << "Geben sie 32 Zahlen zw. 0 ind 1 ein:" << endl << endl;
      cin >> bin;
    
      for(int i=0, x=0; i<32; i++, x++)
      {
        dezi[i] = bin[x] * pow(j, i);
      }
        ergebnis = dezi[0]+dezi[1]+dezi[2]+dezi[3]+dezi[4]+dezi[5]+dezi[6]+dezi[7]+dezi[8]+dezi[9]+dezi[10]+dezi[11]+dezi[12]+dezi[13]+dezi[14]+dezi[15]+dezi[16]+dezi[17]+dezi[18]+dezi[19]+dezi[20]+dezi[21]+dezi[22]+dezi[23]+dezi[24]+dezi[25]+dezi[26]+dezi[27]+dezi[28]+dezi[29]+dezi[30]+dezi[31];
        cout << "Ihre Zahl im Dezimalsystem:" << endl << ergebnis << endl;
    }
    

    Danke schon mal



  • Ich verwende VS 2k5



  • string to int geht nicht ganz so leicht. Schau einmal in die FAQ, "einmal int nach string und zurück"



  • Kannst du mir das zeigen(nicht FAQ sondern Code) ich schaff das nicht bei mir geht das irgendwie nicht



  • Hättest du in die FAQ geschaut, wüsstest du, dass dort sehr aufschlussreiche Beispiele stehen:

    #include <sstream> 
    #include <string> 
    #include <iostream> 
    using namespace std; 
    
    int main() 
    {   
        string AlsString("3.14"); 
        stringstream Str; 
        Str << AlsString; 
        double d; 
        Str >> d; 
        cout << d << endl; 
    }
    


  • hab ich aber wie dir vllt aufgefallen ist muss/dezi[i] eine zahl stehen und wenn ich dass so mache wie die bsps dann mekert er wnn ich den [] op



  • hmm da sollte ehr sowas wie:

    template <typename F, typename T>
    bool cast_me(const F& src, T& dest)
    {
        std::stringstream ss;
        ss << src;
        return (!ss >> dest ? false : true);
    }
    

    ... nja dual zu dezimal ...

    std::size_t bin_to_dec(const std::size_t& num)
    {
    	std::stringstream ss;
    	ss << num;
    	std::string string_num = ss.str();
    
    	std::size_t cur		= 0;
    	std::size_t len		= string_num.length();
    	std::size_t num_pos = 0;
    
    	for (std::size_t pos = 0; pos < len; ++pos)
    	{
    		if (string_num[pos] != '0' && string_num[pos] != '1')
    			return 0;
    
    		ss.clear();
    		ss.str("");
    		ss << string_num[pos];
    		ss >> num_pos;
    		cur += static_cast<std::size_t>(std::pow(2.0, static_cast<int>((len - 1) - pos)) * num_pos);
    	}
    
    	return cur;
    }
    

    ... ist nicht die beste Lösung aber ganz in Ordnung ... die Variable "len" ist nur um ein wenig Performance zu sparen drin ... kannst auch jedesmal length aufrufen ...



  • aja ... nutzen tut man das dann bsw so:

    int main()
    {
    	std::cout << "Welchen Wert soll die Variable annehmen?" << std::endl;
    	std::istringstream ss;
    	std::string string_input;
            unsigned int value = 0;
    
    	do {
    		std::getline(std::cin, string_input);
    		ss.clear();
    		ss.str(string_input);
    		ss >> value;
    	} while (!ss);
    
    	std::cout << bin_to_dec(value) << std::endl;
    }
    

Anmelden zum Antworten