Glib::ustring und gunichar



  • Hallo,
    Ich bin neu hier, seid gegrüßt!

    Bin gerade dabei mir die Gtkmm-Programmierung beizubringen.

    Kann mir jemand sagen, wie ich EINEN gunichar in einen Glib::ustring hineinschreibe?
    Z.b. dass ich das anhand eines Indexwertes bestimme, wo der gunichar in den Glib::ustring geschrieben wird...

    Das muss doch möglich sein, so in der Art wie mit std::string...

    Ich habe die Klassenreferenz durchforstet, blick da aber nicht mehr durch...
    http://www.gtkmm.org/docs/glibmm-2.4/docs/reference/html/classGlib_1_1ustring.html#f7abdeaff45f1839953696b3ab2b0bf4

    Danke für brauchbare Tipps

    Gruß, Armin.



  • Hallo,

    HymiR schrieb:

    Kann mir jemand sagen, wie ich EINEN gunichar in einen Glib::ustring hineinschreibe?

    Gibt mehrere Möglichkeiten:
    * Per push_back
    * Per append
    * Per assign
    * Per insert
    * Per replace
    * Per Zuweisungsoperator (bzw. per [] operator)

    Z.b. dass ich das anhand eines Indexwertes bestimme, wo der gunichar in den Glib::ustring geschrieben wird...

    Nun, das wäre append, insert oder replace.

    Falls dir das nicht hilft: Bitte Code mit Fehlermeldung posten.

    MfG

    GPC :xmas2:



  • Danke für die Antwort.

    Hier der relevante Code:

    /***************************************************************************
     *            engine.cc
     *
     *  Wed Dec  6 14:33:34 2006
     *  Copyright  2006  HymiR
     *  widukind@gmx.at
     ****************************************************************************/
    
    #include "engine.h"
    
    Trans::Trans()
    {
    	cout << "\033[01;34m==>\tEngine wird erzeugt.\033[00m\n"; 
    	STDSYM = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
    	stdsym = "abcdefghijklmnopqrstuvwxyz";
    	SYM133 = "4BCD3F681JK7MN0PQR5TUVWXYZ";
    }
    
    ustring Trans::get(ustring eing)
    {
    	Ausgabe=eing;
    	for(int i=0; i<Ausgabe.size(); i++)
    	{
    		for(int e=0; e<26; e++)
    		{
    			if(Ausgabe.at(i)==STDSYM.at(e)||Ausgabe.at(i)==stdsym.at(e))
    				Ausgabe.insert(i, SYM133[e]);
    		}
    	}
    	return Ausgabe;
    }
    

    Also Zeile 27 möchte ich am Index i des ustrings Ausgabe den Wert am Index e des ustrings SYM133 überschreiben. also gunichars überschreiben:

    Ausgabe.insert(i, SYM133[e]);
    

    An dieser Stelle habe ich diverse auch vo dir genannte Möglichkeiten probiert.

    Ich find den Fehler einfach nicht.

    Auch mit:

    Ausgabe[i] = SYM133[e];
    

    an selbiger Zeile gibt mir diese Meldung aus (auf diese Zeile zeigend).

    engine.cc:27: Fehler: Ungültiger L-Wert in Zuweisung
    

    Was habe ich in diesem Stück Code falsch gemacht?
    Wie kann ich das bewerkstelligen?

    Bei der Zeile darüber möchte ich ddie gunichars vergleichen.
    Hoffe das ist hier richtig gemacht.

    Besten Dank für eure Hilfe 🙂

    Gruß, Armin.



  • Hi,

    hier mal ein kleines Beispiel:

    #include <iostream>
    #include <glibmm.h>
    
    int main() {
        Glib::ustring str = "Hello";
        gunichar c = 'a';
    
        str.replace(1,1,1,c);
        std::cout<<str<<std::endl;
        return EXIT_SUCCESS;
    }
    

    Das funktioniert. Sehen wir uns replace genauer an: Die erste Eins steht für den Index des zu ersetzenden Elements (also den Buchstaben e). Die zweite Eins steht für die Anzahl Zeichen, die durch c ersetzt werden soll (wir wollen nur das e ersetzen). Die dritte Eins steht für die Anzahl, wie oft c eingefügt werden soll (wir wollen nur ein mal einfügen). Und c ist schließlich der Buchstabe, der den alten ersetzt.

    Und der operator[] bzw. at sind nur für lesenden Zugriff gedacht (sie geben einen Wert und keine Referenz zurück).

    MfG

    GPC



  • Servus, GPC

    Danke für dieses kleine Tutorium!
    Du bist der beste!

    Es ist ja eh so simpel, aber wenn man einfach nicht mehr weiterkommt, und auch im Netz absolut nix findet, dann könnte man glatt ausrasten 😃
    Thor mit dir!


Anmelden zum Antworten