Bitte angucken und helfen



  • Da mir keiner erklären kann wie ich "std::map< std::string, int >" anwenden kann, habe ich es mal mit switch-case versucht.... darauf kam dieser fehler:

    switch (Ring1)

    {
    case 'Braun': Ring1=Braun;break;

    case 'Rot': Ring1=Rot;break;

    case 'Orange': Ring1=Orange;break;

    case 'Gruen': Ring1=Gruen;break;

    case 'Blau': Ring1=Blau;break;

    case 'Violett': Ring1=Violett;break;

    case 'Grau': Ring1=Grau;break;

    case 'Weiss': Ring1=Weiss;break;

    }[cpp]

    C:\Dokumente und Einstellungen\gast\test.cpp(183) : error C2450: switch-Ausdruck des Typs 'class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >' nicht erlaubt
    Kein benutzerdefinierter Konvertierungsoperator verfuegbar, der diese Konvertierung durchfuehren kann, oder der Operator kann nicht aufgerufen werden
    C:\Dokumente und Einstellungen\gast\test.cpp(184) : error C2015: Zu viele Zeichen in der Konstante
    C:\Dokumente und Einstellungen\gast\test.cpp(188) : error C2015: Zu viele Zeichen in der Konstante
    C:\Dokumente und Einstellungen\gast\test.cpp(188) : error C2196: Wert fuer case '0' wurde bereits verwendet
    C:\Dokumente und Einstellungen\gast\test.cpp(190) : error C2015: Zu viele Zeichen in der Konstante
    C:\Dokumente und Einstellungen\gast\test.cpp(190) : error C2196: Wert fuer case '0' wurde bereits verwendet
    C:\Dokumente und Einstellungen\gast\test.cpp(194) : error C2015: Zu viele Zeichen in der Konstante
    C:\Dokumente und Einstellungen\gast\test.cpp(194) : error C2196: Wert fuer case '0' wurde bereits verwendet
    C:\Dokumente und Einstellungen\gast\test.cpp(198) : error C2015: Zu viele Zeichen in der Konstante
    C:\Dokumente und Einstellungen\gast\test.cpp(198) : error C2196: Wert fuer case '0' wurde bereits verwendet
    Fehler beim Ausführen von cl.exe.

    Daraus folgere ich mal das man switch case so nicht anwenden kann ;-)(oder doch?? wennn ja, wie?)
    Kann man switch-case überhaupt mit ganzen Worten benutzen oder kann man nur einzelne Stellen abfragen?

    Danke im VORAUS 😃



  • Na gut, dann etwas zum Thema (btw, meine obige Aussage war ernst gemeint):

    switch-case funktioniert nur mit Ganzzahltypen als Auswahlkriterium (int in allen Variationen, char, enum's). Und Zeichen-Konstanten bestehen normalerweise nur aus einem Zeichen, deshalb sind die Ausdrücke 'Braun' etc. ungültig.

    Für den Umgang mit map's empfehle ich mal einen Blick in meinen Magazin-Artikel "Aufbau der STL - Teil 1" (zu erreichen dort↓).

    In Kurzfassung sieht das so aus:

    map<string,int> Farbnummern;
    Farbnummern["Braun"]=Braun;
    Farbnummern["Rot"]=Rot;
    ...
    
    cout<<Farbnummern[Ring1]<<endl;
    

    (die map<> kannst du einmal anlegen und dann beliebig oft nach Werten da drin suchen)



  • Ich poste am besten mal das ganze programm... dann könnt ihr mir genau sagen was ich einsetzen muss.... dann verstehe ich es vllt.

    #include <iostream>
    #include <conio.h>
    #include <string>
    using namespace std;
    
    int main (void)
    
    {
    
    char Auswahl = 'X';
    int Braun = 1;
    int Erg;
    int Ergebnis;
    
    cout<<"Moechten sie [W] die Widerstandszahl oder [F] die Farbcodierung eingeben?\n"<<endl;
    cin>>Auswahl;
    
    		if (Auswahl == 'F')
    
    		{ 
    		cout<<"\nGeben sie die gewuenschte Anzahl der Ringe an (V = 4 oder R = 5)\n"<<endl;
    		cin>>Auswahl;
    		}
    	string Ring1;
    	string Ring2;	
    	string Ring3;
    	string Ring4;
    	string Ring5;
    switch (Auswahl)
    
    {
    
    case 'W':	cout<<"Void";break;
    
    case 'V':
    		 cout<<"Geben sie bitte die Farbe des ersten Ringes an:\n\n";
    		 cout<<"Braun"<<endl;
    		 cout<<"Rot"<<endl;
    		 cout<<"Orange"<<endl;
    		 cout<<"Gelb"<<endl;
    		 cout<<"Gruen"<<endl;
    		 cout<<"Blau"<<endl;
    		 cout<<"Violett"<<endl;
    		 cout<<"Grau"<<endl;
    		 cout<<"Weiss"<<endl;
    		 cin>>Ring1;
    
    		 cout<<"Geben sie bitte die Farbe des zweiten Ringes an:\n\n";
    		 cout<<"Schwarz"<<endl;
    		 cout<<"Braun"<<endl;
    		 cout<<"Rot"<<endl;
    		 cout<<"Orange"<<endl;
    		 cout<<"Gelb"<<endl;
    		 cout<<"Gruen"<<endl;
    		 cout<<"Blau"<<endl;
    		 cout<<"Violett"<<endl;
    		 cout<<"Grau"<<endl;
    		 cout<<"Weiss"<<endl;
    		 cin>>Ring2;
    
    		 cout<<"Geben sie bitte die Farbe des dritten Ringes an:\n\n";
    		 cout<<"Schwarz"<<endl;
    		 cout<<"Braun"<<endl;
    		 cout<<"Rot"<<endl;
    		 cout<<"Orange"<<endl;
    		 cout<<"Gelb"<<endl;
    		 cout<<"Gruen"<<endl;
    		 cout<<"Blau"<<endl;
    		 cout<<"Violett"<<endl;
    		 cout<<"Grau"<<endl;
    		 cout<<"Weiss"<<endl;
    		 cout<<"Gold"<<endl;
    		 cout<<"Silber"<<endl;
    		 cin>>Ring3;
    
    		 cout<<"Geben sie bitte die Farbe des vierten Ringes an:\n\n";
    		 cout<<"Keine"<<endl;
    		 cout<<"Braun"<<endl;
    		 cout<<"Rot"<<endl;
    		 cout<<"Gruen"<<endl;
    		 cout<<"Blau"<<endl;
    		 cout<<"Violett"<<endl;
    		 cout<<"Gold"<<endl;
    		 cout<<"Silber"<<endl;
    		 cin>>Ring4;break;
    
    case 'R':
    
    		 cout<<"Geben sie bitte die Farbe des ersten Ringes an:\n\n";
    		 cout<<"Braun"<<endl;
    		 cout<<"Rot"<<endl;
    		 cout<<"Orange "<<endl;
    		 cout<<"Gelbt "<<endl;
    		 cout<<"Gruen"<<endl;
    		 cout<<"Blau"<<endl;
    		 cout<<"Violett"<<endl;
    		 cout<<"Grau"<<endl;
    		 cout<<"Weiss\n\n"<<endl;
    		 cin>>Ring1;
    
    		 cout<<"\nGeben sie bitte die Farbe des zweiten Ringes an:\n\n";
    		 cout<<"Schwarz"<<endl;
    		 cout<<"Braun"<<endl;
    		 cout<<"Rot"<<endl;
    		 cout<<"Orange"<<endl;
    		 cout<<"Gelb"<<endl;
    		 cout<<"Gruen"<<endl;
    		 cout<<"Blau"<<endl;
    		 cout<<"Violett"<<endl;
    		 cout<<"Grau"<<endl;
    		 cout<<"Weiss\n\n"<<endl;
    		 cin>>Ring2;
    
    		 cout<<"Geben sie bitte die Farbe des dritten Ringes an:\n\n";
    		 cout<<"Schwarz"<<endl;
    		 cout<<"Braun"<<endl;
    		 cout<<"Rot"<<endl;
    		 cout<<"Orange"<<endl;
    		 cout<<"Gelb"<<endl;
    		 cout<<"Gruen"<<endl;
    		 cout<<"Blau"<<endl;
    		 cout<<"Violett"<<endl;
    		 cout<<"Grau"<<endl;
    		 cout<<"Weiss\n\n"<<endl;
    		 cin>>Ring3;
    
    		 cout<<"Geben sie bitte die Farbe des vierten Ringes an:\n\n";
    		 cout<<"Schwarz"<<endl;
    		 cout<<"Braun"<<endl;
    		 cout<<"Rot"<<endl;
    		 cout<<"Orange"<<endl;
    		 cout<<"Gelb"<<endl;
    		 cout<<"Gruen"<<endl;
    		 cout<<"Blau"<<endl;
    		 cout<<"Gold"<<endl;
    		 cout<<"Silber\n\n"<<endl;
    		 cin>>Ring4;
    
    		 cout<<"Geben sie bitte die Farbe des fünften Ringes an:\n\n";
    		 cout<<"Keine"<<endl;
    		 cout<<"Braun"<<endl;
    		 cout<<"Rot"<<endl;
    		 cout<<"Gruen"<<endl;
    		 cout<<"Blau"<<endl;
    		 cout<<"Violett"<<endl;
    		 cout<<"Grau "<<endl;
    		 cout<<"Gold"<<endl;
    		 cout<<"Silber\n\n"<<endl;
    		 cin>>Ring5;break;
    
    default	:cout<<"Falsche eingabe";break;
    }
    
    /*Erg = Integer.parseInt(Ring1);
    Ergebnis = Integer.toString(Erg);
    */
    
    return 0;
    }
    

    also, die variablen sind noch nicht deklariert... aber es geht mir nur um die allgemeine funktion des programms und noch nicht um die genauen zahlen...

    Ich muss den eingegebenen worten eine Zahl zuweisen und muss nachher damit rechnen.. if-else funktioniert nicht, switch-case auch nicht... und die vorschläge bis jetzt waren für mich noch unverständlich!

    Nochmals danke und ich hoffe ihr könnt mir weiterhelfen!



  • Naja... bin sicher es funktioniert so... aber wie gesagt ich bin noch anfänger in der programmierung und das mit den maps verstehe ich nicht direkt 😕

    z.B:

    map<string,int> Farbnummern;
    Farbnummern["Braun"]=Braun;
    Farbnummern["Rot"]=Rot;
    ...

    cout<<Farbnummern[Ring1]<<endl;

    schreibt man da die Variablen in die Map rein oder ist das schon die Abfrage??



  • ups... hat gehangen jetzt ist es mehrmals drin^^



  • Mit den Anweisungen Farbnummern["Braun"]=Braun; etc. füllst du die map mit Wert(paar)en aus einem Schlüssel (in diesem Fall der String "Braun") und einem dazugehörigen Wert (hier die int-Konstante Braun=2). Die cout-Zeile sucht in der map nach dem Schlüssel Ring1 und gibt den zugehörigen Wert aus.

    (wie gesagt, lies mal im Magazin)



  • Also... ich verstehe nicht wie man die map anwendet, also wie man es schreiben muss damit auch alles funktioniert... Ich habe auch dein magazin gelesen,was bestimmmt auch hilfreich ist, aber wie gesagt, bin ich noch ein anfänger!

    Kannst du mir vllt. genau sagen wie die map auszusehen hat wenn ich alle deklarationen angebe?

    Schwarz = 0
    Braun = 1
    Rot = 2
    Orange = 3
    Gelb = 4
    Gruen = 5
    Blau = 6
    Violett = 7
    Grau = 8
    Weiss = 9

    Ich weiß dass es ein bisschen unverschämt rüberkommt wenn ich jetzt frage ob du meine arbeit machen kannst, aber ich komme so absolut nicht weiter....

    danke für deine hilfe
    Greets Soulpincher



  • Im einfachsten Fall kannst du für jede Farbe eine Zuweisung ala Farbnummern["Farbe"]=Farbe; untereinander schreiben. Eleganter geht es, wenn du Hilfsarrays und STL-Algorithmen benutzt:

    void init_map(map<string,int>& data)
    {
      //in das Array schreibst du alle Kombinationen aus Farbname und Kennnummer
      pair<string,int> values[]=
      {
        make_pair("Schwarz",0),
        make_pair("Braun",1),
        ...
      };
      int vsize=sizeof(values)/sizeof(values[0]);
      copy(values,values+vsize,inserter(data,data.begin());
    }
    
    //im Hauptprogramm:
    map<string,int> Farbnummern;
    init_map(Farbnummern);
    


  • welche bibliothek muss man verwenden?



  • #include <iostream>
    #include <conio.h>
    #include <string>
    using namespace std;
    
    int main (void)
    
    {
    
    char Auswahl = 'X';
    int Braun = 1;
    int Erg;
    int Ergebnis;
    int Rot = 1;
    
    void init_map(map<string,int>& data) 
    { 
      //in das Array schreibst du alle Kombinationen aus Farbname und Kennnummer 
      pair<string,int> values[]= 
      { 
        make_pair("Schwarz",0), 
        make_pair("Braun",1), 
        make_pair("Rot",2),
    	make_pair("Orange",3),
    	make_pair("Gelb",4),
    	make_pair("Grün",5),
    	make_pair("Blau",6),
    	make_pair("Violett",7),
    	make_pair("Grau",8),
    	make_pair("Weiss",9),
      }; 
      int vsize=sizeof(values)/sizeof(values[0]); 
      copy(values,values+vsize,inserter(data,data.begin()); 
    } 
    
    cout<<"Moechten sie [W] die Widerstandszahl oder [F] die Farbcodierung eingeben?\n"<<endl;
    cin>>Auswahl;
    
    		if (Auswahl == 'F')
    
    		{ 
    		cout<<"\nGeben sie die gewuenschte Anzahl der Ringe an (V = 4 oder R = 5)\n"<<endl;
    		cin>>Auswahl;
    		}
    	string Ring1;
    	string Ring2;	
    	string Ring3;
    	string Ring4;
    	string Ring5;
    switch (Auswahl)
    
    {
    
    case 'W':	cout<<"Void";break;
    
    case 'V':
    		 cout<<"Geben sie bitte die Farbe des ersten Ringes an:\n\n";
    		 cout<<"Braun"<<endl;
    		 cout<<"Rot"<<endl;
    		 cout<<"Orange"<<endl;
    		 cout<<"Gelb"<<endl;
    		 cout<<"Gruen"<<endl;
    		 cout<<"Blau"<<endl;
    		 cout<<"Violett"<<endl;
    		 cout<<"Grau"<<endl;
    		 cout<<"Weiss"<<endl;
    		 cin>>Ring1;
    
    		 cout<<"Geben sie bitte die Farbe des zweiten Ringes an:\n\n";
    		 cout<<"Schwarz"<<endl;
    		 cout<<"Braun"<<endl;
    		 cout<<"Rot"<<endl;
    		 cout<<"Orange"<<endl;
    		 cout<<"Gelb"<<endl;
    		 cout<<"Gruen"<<endl;
    		 cout<<"Blau"<<endl;
    		 cout<<"Violett"<<endl;
    		 cout<<"Grau"<<endl;
    		 cout<<"Weiss"<<endl;
    		 cin>>Ring2;
    
    		 cout<<"Geben sie bitte die Farbe des dritten Ringes an:\n\n";
    		 cout<<"Schwarz"<<endl;
    		 cout<<"Braun"<<endl;
    		 cout<<"Rot"<<endl;
    		 cout<<"Orange"<<endl;
    		 cout<<"Gelb"<<endl;
    		 cout<<"Gruen"<<endl;
    		 cout<<"Blau"<<endl;
    		 cout<<"Violett"<<endl;
    		 cout<<"Grau"<<endl;
    		 cout<<"Weiss"<<endl;
    		 cout<<"Gold"<<endl;
    		 cout<<"Silber"<<endl;
    		 cin>>Ring3;
    
    		 cout<<"Geben sie bitte die Farbe des vierten Ringes an:\n\n";
    		 cout<<"Keine"<<endl;
    		 cout<<"Braun"<<endl;
    		 cout<<"Rot"<<endl;
    		 cout<<"Gruen"<<endl;
    		 cout<<"Blau"<<endl;
    		 cout<<"Violett"<<endl;
    		 cout<<"Gold"<<endl;
    		 cout<<"Silber"<<endl;
    		 cin>>Ring4;break;
    
    case 'R':
    
    		 cout<<"Geben sie bitte die Farbe des ersten Ringes an:\n\n";
    		 cout<<"Braun"<<endl;
    		 cout<<"Rot"<<endl;
    		 cout<<"Orange "<<endl;
    		 cout<<"Gelbt "<<endl;
    		 cout<<"Gruen"<<endl;
    		 cout<<"Blau"<<endl;
    		 cout<<"Violett"<<endl;
    		 cout<<"Grau"<<endl;
    		 cout<<"Weiss\n\n"<<endl;
    		 cin>>Ring1;
    
    		 cout<<"\nGeben sie bitte die Farbe des zweiten Ringes an:\n\n";
    		 cout<<"Schwarz"<<endl;
    		 cout<<"Braun"<<endl;
    		 cout<<"Rot"<<endl;
    		 cout<<"Orange"<<endl;
    		 cout<<"Gelb"<<endl;
    		 cout<<"Gruen"<<endl;
    		 cout<<"Blau"<<endl;
    		 cout<<"Violett"<<endl;
    		 cout<<"Grau"<<endl;
    		 cout<<"Weiss\n\n"<<endl;
    		 cin>>Ring2;
    
    		 cout<<"Geben sie bitte die Farbe des dritten Ringes an:\n\n";
    		 cout<<"Schwarz"<<endl;
    		 cout<<"Braun"<<endl;
    		 cout<<"Rot"<<endl;
    		 cout<<"Orange"<<endl;
    		 cout<<"Gelb"<<endl;
    		 cout<<"Gruen"<<endl;
    		 cout<<"Blau"<<endl;
    		 cout<<"Violett"<<endl;
    		 cout<<"Grau"<<endl;
    		 cout<<"Weiss\n\n"<<endl;
    		 cin>>Ring3;
    
    		 cout<<"Geben sie bitte die Farbe des vierten Ringes an:\n\n";
    		 cout<<"Schwarz"<<endl;
    		 cout<<"Braun"<<endl;
    		 cout<<"Rot"<<endl;
    		 cout<<"Orange"<<endl;
    		 cout<<"Gelb"<<endl;
    		 cout<<"Gruen"<<endl;
    		 cout<<"Blau"<<endl;
    		 cout<<"Gold"<<endl;
    		 cout<<"Silber\n\n"<<endl;
    		 cin>>Ring4;
    
    		 cout<<"Geben sie bitte die Farbe des fünften Ringes an:\n\n";
    		 cout<<"Keine"<<endl;
    		 cout<<"Braun"<<endl;
    		 cout<<"Rot"<<endl;
    		 cout<<"Gruen"<<endl;
    		 cout<<"Blau"<<endl;
    		 cout<<"Violett"<<endl;
    		 cout<<"Grau "<<endl;
    		 cout<<"Gold"<<endl;
    		 cout<<"Silber\n\n"<<endl;
    		 cin>>Ring5;break;
    
    default	:cout<<"Falsche eingabe";break;
    }
    
    /*Erg = Integer.parseInt(Ring1);
    Ergebnis = Integer.toString(Erg);
    */
    
    return 0;
    }
    

    ich habs mal da hingezogen und gehofft das es stimmt...
    jetzt kamen folgende fehler!

    Widerstandsfarbcodierung.cpp
    F:\Schulprojekt\Widerstandsfarbcodierung.cpp(28) : error C2065: 'map' : nichtdeklarierter Bezeichner
    F:\Schulprojekt\Widerstandsfarbcodierung.cpp(28) : error C2275: "string" : Ungültige Verwendung dieses Typs als Ausdruck
    c:\programme\microsoft visual studio\vc98\include\xstring(612) : Siehe Deklaration von 'string'
    F:\Schulprojekt\Widerstandsfarbcodierung.cpp(28) : error C2062: 'int'-Typ unerwartet
    F:\Schulprojekt\Widerstandsfarbcodierung.cpp(29) : error C2143: Syntaxfehler : Fehlendes ';' vor '{'
    F:\Schulprojekt\Widerstandsfarbcodierung.cpp(45) : error C2065: 'inserter' : nichtdeklarierter Bezeichner
    F:\Schulprojekt\Widerstandsfarbcodierung.cpp(45) : error C2065: 'data' : nichtdeklarierter Bezeichner
    F:\Schulprojekt\Widerstandsfarbcodierung.cpp(45) : error C2228: Der linke Teil von '.begin' muss eine Klasse/Struktur/Union sein
    F:\Schulprojekt\Widerstandsfarbcodierung.cpp(45) : error C2143: Syntaxfehler : Fehlendes ')' vor ';'
    Fehler beim Ausführen von cl.exe.



  • Erstens: Du kannst keine Funktionen (init_map()) in der main() definieren. Die Funktion muß schon eigenständig stehen.

    Zweitens: Du benötigst natürlich noch den Header <map>, um eine map<> anlegen und verwenden zu können - und <iterator> für den Insert-Iterator, den die init-Funktion verwendet.



  • CStoll schrieb:

    Erstens: Du kannst keine Funktionen (init_map()) in der main() definieren. Die Funktion muß schon eigenständig stehen.

    Zweitens: Du benötigst natürlich noch den Header <map>, um eine map<> anlegen und verwenden zu können - und <iterator> für den Insert-Iterator, den die init-Funktion verwendet.

    😞

    Naja... danke für deine hilfe, aber ich denke ich komme so nicht weiter...
    Hat mich gefreut dich kennen zu lernen, aber ich denke jetzt reicht es....
    mir fehlen zu viele kenntnisse um überhaupt ansatzweise mit dir reden zu können!

    Ich fang jetzt neu an ohne string

    MfG



  • Also ich habs jetzt teilweise hinbekommen aber.....

    es wurde irgendwie ne neue Datei geladen T.T

    // utility standard header
    
    #if     _MSC_VER > 1000
    #pragma once
    #endif
    
    #ifndef _UTILITY_
    #define _UTILITY_
    #include <iosfwd>
    
    #ifdef  _MSC_VER
    #pragma pack(push,8)
    #endif  /* _MSC_VER */
    _STD_BEGIN
    		// TEMPLATE STRUCT pair
    template<class _T1, class _T2> struct pair {
    	typedef _T1 first_type;
    	typedef _T2 second_type;
    	pair()
    		: first(_T1()), second(_T2()) {}
    	pair(const _T1& _V1, const _T2& _V2)
    		: first(_V1), second(_V2) {}
    	template<class U, class V> pair(const pair<U, V> &p)
    		: first(p.first), second(p.second) {}
    	_T1 first;
    	_T2 second;
    	};
    template<class _T1, class _T2> inline
    	bool __cdecl operator==(const pair<_T1, _T2>& _X,
    		const pair<_T1, _T2>& _Y)
    	{return (_X.first == _Y.first && _X.second == _Y.second); }
    template<class _T1, class _T2> inline
    	bool __cdecl operator!=(const pair<_T1, _T2>& _X,
    		const pair<_T1, _T2>& _Y)
    	{return (!(_X == _Y)); }
    template<class _T1, class _T2> inline
    	bool __cdecl operator<(const pair<_T1, _T2>& _X,
    		const pair<_T1, _T2>& _Y)
    	{return (_X.first < _Y.first ||
    		!(_Y.first < _X.first) && _X.second < _Y.second); }
    template<class _T1, class _T2> inline
    	bool __cdecl operator>(const pair<_T1, _T2>& _X,
    		const pair<_T1, _T2>& _Y)
    	{return (_Y < _X); }
    template<class _T1, class _T2> inline
    	bool __cdecl operator<=(const pair<_T1, _T2>& _X,
    		const pair<_T1, _T2>& _Y)
    	{return (!(_Y < _X)); }
    template<class _T1, class _T2> inline
    	bool __cdecl operator>=(const pair<_T1, _T2>& _X,
    		const pair<_T1, _T2>& _Y)
    	{return (!(_X < _Y)); }
    template<class _T1, class _T2> inline
    	pair<_T1, _T2> __cdecl make_pair(const _T1& _X, const _T2& _Y)
    	{return (pair<_T1, _T2>(_X, _Y)); }
    		// ITERATOR TAGS (from <iterator>)
    struct input_iterator_tag {};
    struct output_iterator_tag {};
    struct forward_iterator_tag
    	: public input_iterator_tag {};
    struct bidirectional_iterator_tag
    	: public forward_iterator_tag {};
    struct random_access_iterator_tag
    	: public bidirectional_iterator_tag  {};
    		// TEMPLATE CLASS iterator (from <iterator>)
    template<class _C, class _Ty, class _D = ptrdiff_t>
    	struct iterator {
    	typedef _C iterator_category;
    	typedef _Ty value_type;
    	typedef _D distance_type;
    	};
    template<class _Ty, class _D>
    	struct _Bidit : public iterator<bidirectional_iterator_tag,
    		_Ty, _D> {};
    template<class _Ty, class _D>
    	struct _Ranit : public iterator<random_access_iterator_tag,
    		_Ty, _D> {};
    		// TEMPLATE CLASS iterator_traits (from <iterator>)
    template<class _It>
    	struct iterator_traits {
    	typedef _It::iterator_category iterator_category;
    	typedef _It::value_type value_type;
    	typedef _It::distance_type distance_type;
    	};
    		// TEMPLATE FUNCTION _Iter_cat (from <iterator>)
    template<class _C, class _Ty, class _D> inline
    	_C __cdecl _Iter_cat(const iterator<_C, _Ty, _D>&)
    	{_C _IterCatTag;
    	 _C* _pIterCatTag;
    	_pIterCatTag = &_IterCatTag;	// Workaround for C4700 warning
    	return (_IterCatTag); }
    template<class _Ty> inline
    	random_access_iterator_tag __cdecl _Iter_cat(const _Ty *)
    	{random_access_iterator_tag _RandIterTag;
    	 random_access_iterator_tag* _pRandIterTag;
    	_pRandIterTag = &_RandIterTag;	// Workaround for C4700 warning
    	return (_RandIterTag); }
    		// TEMPLATE FUNCTION _Distance
    template<class _II> inline
    	_CNTSIZ(_II) __cdecl distance(_II _F, _II _L)
    	{_CNTSIZ(_II) _N = 0;
    	_Distance(_F, _L, _N, _Iter_cat(_F));
    	return (_N); }
    template<class _II, class _D> inline
    	void __cdecl _Distance(_II _F, _II _L, _D& _N)
    	{_Distance(_F, _L, _N, _Iter_cat(_F)); }
    template<class _II, class _D> inline
    	void __cdecl _Distance(_II _F, _II _L, _D& _N, input_iterator_tag)
    	{for (; _F != _L; ++_F)
    		++_N; }
    template<class _II, class _D> inline
    	void __cdecl _Distance(_II _F, _II _L, _D& _N, forward_iterator_tag)
    	{for (; _F != _L; ++_F)
    		++_N; }
    template<class _II, class _D> inline
    	void __cdecl _Distance(_II _F, _II _L, _D& _N,
    		bidirectional_iterator_tag)
    	{for (; _F != _L; ++_F)
    		++_N; }
    template<class _RI, class _D> inline
    	void __cdecl _Distance(_RI _F, _RI _L, _D& _N,
    		random_access_iterator_tag)
    	{_N += _L - _F; }
    		// TEMPLATE CLASS reverse_iterator (from <iterator>)
    template<class _RI,
    	class _Ty,
    	class _Rt = _Ty&,
    	class _Pt = _Ty *,
    	class _D = ptrdiff_t>
    	class reverse_iterator : public _Ranit<_Ty, _D> {
    public:
    	typedef reverse_iterator<_RI, _Ty, _Rt, _Pt, _D> _Myt;
    	typedef _RI iter_type;
    	typedef _Rt reference_type;
    	typedef _Pt pointer_type;
    	reverse_iterator()
    		{}
    	explicit reverse_iterator(_RI _X)
    		: current(_X) {}
    	_RI base() const
    		{return (current); }
    	_Rt operator*() const
    		{return (*(current - 1)); }
    	_Pt operator->() const
    		{return (&**this); }
    	_Myt& operator++()
    		{--current;
    		return (*this); }
    	_Myt operator++(int)
    		{_Myt _Tmp = *this;
    		--current;
    		return (_Tmp); }
    	_Myt& operator--()
    		{++current;
    		return (*this); }
    	_Myt operator--(int)
    		{_Myt _Tmp = *this;
    		++current;
    		return (_Tmp); }
    	_Myt& operator+=(_D _N)
    		{current -= _N;
    		return (*this); }
    	_Myt operator+(_D _N) const
    		{return (_Myt(current - _N)); }
    	_Myt& operator-=(_D _N)
    		{current += _N;
    		return (*this); }
    	_Myt operator-(_D _N) const
    		{return (_Myt(current + _N)); }
    	_Rt operator[](_D _N) const
    		{return (*(*this + _N)); }
    protected:
    	_RI current;
    	};
    template<class _RI, class _Ty, class _Rt, class _Pt,
    	class _D> inline
    	bool __cdecl operator==(
    		const reverse_iterator<_RI, _Ty, _Rt, _Pt, _D>& _X,
    		const reverse_iterator<_RI, _Ty, _Rt, _Pt, _D>& _Y)
    	{return (_X.base() == _Y.base()); }
    template<class _RI, class _Ty, class _Rt, class _Pt,
    	class _D> inline
    	bool __cdecl operator!=(
    		const reverse_iterator<_RI, _Ty, _Rt, _Pt, _D>& _X,
    		const reverse_iterator<_RI, _Ty, _Rt, _Pt, _D>& _Y)
    	{return (!(_X == _Y)); }
    template<class _RI, class _Ty, class _Rt, class _Pt,
    	class _D> inline
    	bool __cdecl operator<(
    		const reverse_iterator<_RI, _Ty, _Rt, _Pt, _D>& _X,
    		const reverse_iterator<_RI, _Ty, _Rt, _Pt, _D>& _Y)
    	{return (_Y.base() < _X.base()); }
    template<class _RI, class _Ty, class _Rt, class _Pt,
    	class _D> inline
    	bool __cdecl operator>(
    		const reverse_iterator<_RI, _Ty, _Rt, _Pt, _D>& _X,
    		const reverse_iterator<_RI, _Ty, _Rt, _Pt, _D>& _Y)
    	{return (_Y < _X); }
    template<class _RI, class _Ty, class _Rt, class _Pt,
    	class _D> inline
    	bool __cdecl operator<=(
    		const reverse_iterator<_RI, _Ty, _Rt, _Pt, _D>& _X,
    		const reverse_iterator<_RI, _Ty, _Rt, _Pt, _D>& _Y)
    	{return (!(_Y < _X)); }
    template<class _RI, class _Ty, class _Rt, class _Pt,
    	class _D> inline
    	bool __cdecl operator>=(
    		const reverse_iterator<_RI, _Ty, _Rt, _Pt, _D>& _X,
    		const reverse_iterator<_RI, _Ty, _Rt, _Pt, _D>& _Y)
    	{return (!(_X < _Y)); }
    template<class _RI, class _Ty, class _Rt, class _Pt,
    	class _D> inline
    	_D __cdecl operator-(
    		const reverse_iterator<_RI, _Ty, _Rt, _Pt, _D>& _X,
    		const reverse_iterator<_RI, _Ty, _Rt, _Pt, _D>& _Y)
    	{return (_Y.base() - _X.base()); }
    template<class _RI, class _Ty, class _Rt, class _Pt,
    	class _D> inline
    	reverse_iterator<_RI, _Ty, _Rt, _Pt, _D> __cdecl operator+(_D _N,
    		const reverse_iterator<_RI, _Ty, _Rt, _Pt, _D>& _Y)
    	{return (reverse_iterator<_RI, _Ty, _Rt, _Pt, _D>(
    		_Y.base() - _N)); }
    		// TEMPLATE CLASS istreambuf_iterator (from <iterator>)
    template<class _E, class _Tr = char_traits<_E> >
    	class istreambuf_iterator
    		: public iterator<input_iterator_tag, _E, _Tr::off_type> {
    public:
    	typedef istreambuf_iterator<_E, _Tr> _Myt;
    	typedef _E char_type;
    	typedef _Tr traits_type;
    	typedef _Tr::int_type int_type;
    	typedef basic_streambuf<_E, _Tr> streambuf_type;
    	typedef basic_istream<_E, _Tr> istream_type;
    	istreambuf_iterator(streambuf_type *_Sb = 0) _THROW0()
    		: _Sbuf(_Sb), _Got(_Sb == 0) {}
    	istreambuf_iterator(istream_type& _I) _THROW0()
    		: _Sbuf(_I.rdbuf()), _Got(_I.rdbuf() == 0) {}
    	const _E& operator*() const
    		{if (!_Got)
    			((_Myt *)this)->_Peek();
    		return (_Val); }
    	const _E *operator->() const
    		{return (&**this); }
    	_Myt& operator++()
    		{_Inc();
    		return (*this); }
    	_Myt operator++(int)
    		{if (!_Got)
    			_Peek();
    		_Myt _Tmp = *this;
    		_Inc();
    		return (_Tmp); }
    	bool equal(const _Myt& _X) const
    		{if (!_Got)
    			((_Myt *)this)->_Peek();
    		if (!_X._Got)
    			((_Myt *)&_X)->_Peek();
    		return (_Sbuf == 0 && _X._Sbuf == 0
    			|| _Sbuf != 0 && _X._Sbuf != 0); }
    private:
    	void _Inc()
    		{if (_Sbuf == 0
    			|| _Tr::eq_int_type(_Tr::eof(), _Sbuf->sbumpc()))
    			_Sbuf = 0, _Got = true;
    		else
    			_Got = false; }
    	_E _Peek()
    		{int_type _C;
    		if (_Sbuf == 0
    			|| _Tr::eq_int_type(_Tr::eof(), _C = _Sbuf->sgetc()))
    			_Sbuf = 0;
    		else
    			_Val = _Tr::to_char_type(_C);
    		_Got = true;
    		return (_Val); }
    	streambuf_type *_Sbuf;
    	bool _Got;
    	_E _Val;
    	};
    template<class _E, class _Tr> inline
    	bool __cdecl operator==(const istreambuf_iterator<_E, _Tr>& _X,
    		const istreambuf_iterator<_E, _Tr>& _Y)
    	{return (_X.equal(_Y)); }
    template<class _E, class _Tr> inline
    	bool __cdecl operator!=(const istreambuf_iterator<_E, _Tr>& _X,
    		const istreambuf_iterator<_E, _Tr>& _Y)
    	{return (!(_X == _Y)); }
    		// TEMPLATE CLASS ostreambuf_iterator (from <iterator>)
    template<class _E, class _Tr = char_traits<_E> >
    	class ostreambuf_iterator
    		: public iterator<output_iterator_tag, void, void> {
    	typedef ostreambuf_iterator<_E, _Tr> _Myt;
    public:
    	typedef _E char_type;
    	typedef _Tr traits_type;
    	typedef basic_streambuf<_E, _Tr> streambuf_type;
    	typedef basic_ostream<_E, _Tr> ostream_type;
    	ostreambuf_iterator(streambuf_type *_Sb) _THROW0()
    		: _Failed(false), _Sbuf(_Sb) {}
    	ostreambuf_iterator(ostream_type& _O) _THROW0()
    		: _Failed(false), _Sbuf(_O.rdbuf()) {}
    	_Myt& operator=(_E _X)
    		{if (_Sbuf == 0
    			|| _Tr::eq_int_type(_Tr::eof(), _Sbuf->sputc(_X)))
    			_Failed = true;
    		return (*this); }
    	_Myt& operator*()
    		{return (*this); }
    	_Myt& operator++()
    		{return (*this); }
    	_Myt& operator++(int)
    		{return (*this); }
    	bool failed() const _THROW0()
    		{return (_Failed); }
    private:
    	bool _Failed;
    	streambuf_type *_Sbuf;
    	};
    		// TEMPLATE OPERATORS
    	namespace rel_ops {
    template<class _Ty> inline
    	bool __cdecl operator!=(const _Ty& _X, const _Ty& _Y)
    	{return (!(_X == _Y)); }
    template<class _Ty> inline
    	bool __cdecl operator>(const _Ty& _X, const _Ty& _Y)
    	{return (_Y < _X); }
    template<class _Ty> inline
    	bool __cdecl operator<=(const _Ty& _X, const _Ty& _Y)
    	{return (!(_Y < _X)); }
    template<class _Ty> inline
    	bool __cdecl operator>=(const _Ty& _X, const _Ty& _Y)
    	{return (!(_X < _Y)); }
    	_STD_END
    _STD_END
    #ifdef  _MSC_VER
    #pragma pack(pop)
    #endif  /* _MSC_VER */
    
    #endif /* _UTILITY_ */
    
    /*
     * Copyright (c) 1995 by P.J. Plauger.  ALL RIGHTS RESERVED. 
     * Consult your license regarding permissions and restrictions.
     */
    
    /*
     * This file is derived from software bearing the following
     * restrictions:
     *
     * Copyright (c) 1994
     * Hewlett-Packard Company
     *
     * Permission to use, copy, modify, distribute and sell this
     * software and its documentation for any purpose is hereby
     * granted without fee, provided that the above copyright notice
     * appear in all copies and that both that copyright notice and
     * this permission notice appear in supporting documentation.
     * Hewlett-Packard Company makes no representations about the
     * suitability of this software for any purpose. It is provided
     * "as is" without express or implied warranty.
     */
    

    O.o
    jetzt versteh ich garnix mehr 😑



  • Was soll denn mit dieser Datei jetzt sein? Das ist (offenbar) der Standard-Header <utility> (der wird von <map> eingebunden, das die Schlüssel/Wert-Paare als std::pair anlegt).

    PS: Was spricht denn für dich gegen die Verwendung von Strings? Die Alternative dazu wäre höchstens char* - und das ist wesentlich unangenehmer in der Handhabung.



  • Ich bin noch schüler in einer technik schule...
    ich habe noch nicht so lange informatik und die einzigen arten der verarbeitung die ich bis jetzt gelernt habe sind if-else und switch-case....
    allein das string zu verwenden habe ich mir rausgesucht... um es weiterzuverwenden mangelt es mir an verständnis der weiterverarbeitung gegenüber!^^



  • *ding* ^^

    hab ne idee..... hast du net zufällig TS,Ventrilo oder Skype????



  • Hey hatte gerade nix zu tun und hab kurz ein Beispiel gebastelt...

    #include <iostream>			// cin, cout
    #include <string>			// string
    #include <map>				// map
    #include <algorithm>		// transform
    
    using namespace std;
    
    void InitMap( map<string,int>& Data );
    
    int main ( void )
    {
    	string Ring1;	// Sollte klar sein
    
    	map< string, int > Farbnummern;	// Wir erstellen eben die Map welche die Werte string und int aufnehmen kann
    	InitMap( Farbnummern );	// Wir übergeben die erstellte Map an die Funktion welche sie mit deinen Farben füllt
    
    	cout << "Bitte Farbe eingeben: ";
    
    	cin >> Ring1;
    
    	transform( Ring1.begin(), Ring1.end(), Ring1.begin(), tolower ); // Wir machen aus dem eingegeben Wort kleinbuchstaben dann kann man auch RoT eingeben und er findet rot :-)
    
    	cout << Farbnummern[ Ring1 ] << endl;	// Wert der Ring1 entspricht ausgeben
    
    	return 0;
    }
    
    // Ab hier solltest du selbst mal nachlesen (irgendwo) wie das hier funktioneirt ;-)
    void InitMap( map< string, int >& Data )
    {
      //in das Array schreibst du alle Kombinationen aus Farbname und Kennnummer
      pair< string, int > Values[] = 
      {
        make_pair( "schwarz",	0),
        make_pair( "braun",		1 ),
        make_pair( "rot",		2 ),
        make_pair( "orange",	3 ),
        make_pair( "gelb",		4 ),
        make_pair( "grün",		5 ),
        make_pair( "blau",		6 ),
        make_pair( "violett",	7 ),
        make_pair( "grau",		8 ),
        make_pair( "weiss",		9 ),
      };
      int Vsize = sizeof( Values ) / sizeof( Values[0] );
      copy( Values, Values + Vsize, inserter( Data, Data.begin() ) );
    }
    

    @CStoll: Ich hab das mal nen bisschen formatiert. Ich fand das sah richtig hässlich aus 😃

    Gruß

    Edit: Verdammt! Das Forum hat meinen Code verunstaltet, ich hatte mir so viel Mühe bei der Formatierung gegeben 👎 😃



  • Woa Danke das hat mir sehr geholfen 😉 👍



  • So jetzt hab ich nur noch 1 Problem in der Datei Standard-Header <utility> kommt ein Fehler:

    c:\programme\microsoft visual studio\vc98\include\utility(21) : error C2536: 'std::pair<char [8],int>::first' : Angabe einer expliziten Initialisierung fuer Felder nicht moeglich
    c:\programme\microsoft visual studio\vc98\include\utility(25) : Siehe Deklaration von 'first'
    c:\programme\microsoft visual studio\vc98\include\utility(21) : Bei der Kompilierung der Member-Funktion '__thiscall std::pair<char [8],int>::std::pair<char [8],int>(const char (&)[8],const int &)' der Klassenvorlage

    is der normal ?? oder is die Datei irgendwie Beschädigt?



  • Wenn du nur die Hälfte des Fehlers angibst, wird es schwer, etwas zu erkennen. (die beiden Zeilen geben nur an, wo der Fehler aufgetreten ist.)

    Nachtrag: Das Problem dürfte sein, daß du ein char-Array nicht als Template-Parameter verwenden kannst, weil es die für den Ctor benötigten Methoden nicht bereitstellt (C-style Arrays haben z.B. keinen Copy-Ctor) - wie gesagt: char* sind schwieriger zu handhaben als std::string.


Anmelden zum Antworten