std::string = std::string + unsigned int



  • n'mittach 😃

    unsigned char smiley = 1;
    std::string smiley_zusatz = "*";
    
    std::string figur = smiley + smiley_zusatz;
    

    ist meine defintion von einer figur, die ich bei einem programm benutzen will:

    if(strecke[start - 1] == figur) { .. }
    

    strecke ist ein Vektor vom typ std::string 😉

    error C2784: "std::basic_string<_Elem,_Traits,_Alloc> std::operator +(const std::basic_string<_Elem,_Traits,_Alloc> &,const _Elem)": template-Argument für "const std::basic_string<_Elem,_Traits,_Alloc> &" konnte nicht von "unsigned char" hergeleitet werden.

    1> c:\program files\microsoft visual studio 8\vc\include\string(61): Siehe Deklaration von 'std::operator +'

    liebe grüsse 😉



  • 'char', 'signed char' und 'unsigned char' sind drei unabhängige Datentypen (auch wenn zwei davon identische Wertebereiche haben) - und string arbeitet nur mit normalen char's.



  • CStoll schrieb:

    'char', 'signed char' und 'unsigned char' sind drei unabhängige Datentypen (auch wenn zwei davon identische Wertebereiche haben) - und string arbeitet nur mit normalen char's.

    hi

    danke Cstoll, aber da kommt

    warning C4309: 'Initialisierung': Verkürzung eines konstanten Wertes

    bei allen chars,bsp:

    char k25 = 197; 
    char k40 = 18;
    

    liebe grüsse 😉



  • Ja, die konstanten, die du da zuweisen willst, sind ja auch int-Werte und darum etwas zu groß, um in einen char geprestt zu werden.

    (btw, was soll denn letztendlich in 'figur' drinstehen?)



  • hi

    danke für die antworten,CStoll.
    B2T:

    CStoll schrieb:

    (btw, was soll denn letztendlich in 'figur' drinstehen?)

    {Rufzeichen}{Zeichen}

    char schu = 177; // Ist dieses Zeichen:  ▒
    std::string figur= "!" + schu;
    

    Das soll dann in einem Vektor drinnen sein´(Darum kümmer ich mich darum selber) 😉

    Liebe grüße 😉



  • Gibt es eigentlich nicht einen größeren String, der Zeichen aus der ASCII Tabelle einfach speichern kann. Also ich kopiere aus der Tabelle ein Zeichen, zbsp. nen Smiley zwischen die " " und wird das dann ausgegeben oder ist das nicht möglich?

    also sowas wie wstring oder?

    liebe grüße 😉



  • Was meinst du denn damit? std::string kann nahezu beliebig viele Zeichen verwalten.



  • CPlusMinus-Freak schrieb:

    Gibt es eigentlich nicht einen größeren String, der Zeichen aus der ASCII Tabelle einfach speichern kann. Also ich kopiere aus der Tabelle ein Zeichen, zbsp. nen Smiley zwischen die " " und wird das dann ausgegeben oder ist das nicht möglich?

    also sowas wie wstring oder?

    liebe grüße 😉

    Strings sind nicht dafür da, etwas auszugeben. Ein String enthält nur Werte. Wenn du ein Smily ausgeben willst, muß das Ausgabe-Interface (Konsole, Window, Drucker usw.) den Wert aus einem String entsprechend korrekt zeichnen.

    Wenn du einen Smily haben willst, mußt du wissen, welchen Code (ASCII oder Unicode) er hat. Und dann hoffen, das er am Ende korrekt von jemand anderes gezeichnet wird.



  • vector<string> strecke(10, "X");
    
    	unsigned char ascii = 29;
    	strecke[2] = ascii; 
    	for(string::size_type str = 0; str != strecke.size(); ++str)
    	{
    	cout << strecke[str] << std::endl;
    	}
    

    soetwas in der Art hab ich gemeint 😉
    Nur,dass ich noch so ein Präfix anhängen will, funktioniert leider nicht 😞
    das präfix brauche ich echt, ohne dem muss ich unnötig viele IF-Abfragen machen und selbst dann würde es ein Chaos im Code geben 😮

    Gib es denn nicht eine Art, um soetwas mit einem Präfix zu machen?
    Als Lösung sollte

    !®
    

    nur als Beispiel rauskommen.
    ® = 169;

    Liebe grüsse 😉



  • ich versteh zwar total nicht was du machen willst, aber ich hätte noch ein paar vorschläge, vielleicht passt ja einer zu deinem problem 😉

    falls du mit zeichen ungleich char arbeiten willst, dann geht std::string schon nicht mehr. du kannst dann

    std::wstring wstr("blablabla"L)
    

    oder sowas verwenden, um mit wchar_t's zu hantieren. wenn du sowas wie im ersten post machen willst, dann schreib dir ne neue klasse die ein

    std::map<std::string, unsigned char>
    

    verwaltet, mitsamt dem operator '<<' dann kannst auch direkt ausgeben...


Anmelden zum Antworten