Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Umwandeln

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: [ 1 ] [ 2 ] [ 3 ] > 4 <
030
23.04.2004, 14:54 Uhr
Pablo
Supertux
(Operator)


@windalf: ich habe gar nichts dagegen, wenn du sowas postet, im Gegenteil, das ist eine Herausforderung für mich. Aber deine Beispiele sind gerade nicht hilfreich, vor allem, wenn Anfäger den Code verstehen wollen und du ihnen deine Golf-Suppe gibst, dann können sie damit praktisch nix anfangen.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!

Dieser Post wurde am 23.04.2004 um 14:54 Uhr von Pablo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
031
23.04.2004, 15:01 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


verdammt nochmal das war diesmal keine golfsuppe.
Ich bin doch nur das array mit einem zeiger durchgangen. wenn du die stl nimmst machst du mit den iteratoren auch nichts anderes.
mal davon abgesehen das das performanter ist als immer [ i ] zu verwenden hab ichs mir jetzt halt so angewöhnt und ich find das auch nciht schwerer zu lesen als den anderen code

ich versteh nicht was an
C++:
for(p=i;*p;++p)
so unverständlich sein soll
ist auf jeden fall besser als
C++:
for(int j=0;j<strlen(j);++j)
oder nicht? jedenfalls ist es doch auch nicht schwerer zu verstehen
--
...fleißig wie zwei Weißbrote

Dieser Post wurde am 23.04.2004 um 15:22 Uhr von Windalf editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
032
23.04.2004, 16:04 Uhr
Pablo
Supertux
(Operator)


Für dich nicht, aber für jemanden, der noch nicht den Unterschied zwsichen char[] und char* verstanden hat, ist das wie Chinesich. Ich sage ja, du machst es richtig. Aber deinen Code kann man verstehen, wenn man schon vestanden hat, was ein char* und char[] sind.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
033
23.04.2004, 16:26 Uhr
(un)wissender
Niveauwart


@Windalf
Dein DB-Kram ist schon ganz gut, zumindest nach der Übersicht zu urteilen, aber das hier....
Und performanter ist bei primitiven Pointer die Arithmetik nicht unbedingt, auf x86 bspw. ist das egal, weil der lea-Befehl benutzt werden kann, bei Zugriffen über[].
Das geht mindestens bis in die zweite Dimension gut.
Performanz eines Ausdrucks hängt halt meistens vom Compiler und der Zielmaschine ab.
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
034
26.04.2004, 11:38 Uhr
~Piet
Gast



Zitat:
Pablo postete

@Pablo


C++:
char* ersetzen(const char* suche, const char* neu, const char* inp, char* buffer) {
    char* ptr;
    if (!suche || !neu || !inp || !buffer) return buffer=NULL;
    ptr=strstr(inp, suche);
    if(!ptr) {
        strcpy(buffer, inp);
        return buffer;
    }

    *buffer=0;
    if (ptr!=inp) {    
        strncpy(buffer, inp, ptr-inp);
        buffer[ptr-inp]=0; // damit ich strcat benuzten kann
    }
    strcat(buffer, neu);
    
    ptr+=strlen(suche);
    strcat(buffer, ptr);
    
    return buffer;
}



Ok, die Benuztung....

C++:
char tmp[1000];
...
ersetze("ishst", "ist", "Das ishst ein Test", tmp);
printf("%s\n", tmp);



Sollte "Das ist ein Test" ausgeben. ich überprüfe, ob ich Fehler hab. so on the fly weiss man nie.


@Pablo: Soweit funzt es gut, aber wie kann ich noch mit einbauen, dass wenn mehrere Suchstrings drin sind, wirklich alle ersetzt werden? Im Moment wird lediglich der erste ersetzt. Und noch ne Frage: Wie kann ich den zu ersetzenden String noch ein Pipe anhängen? (z.B. 'sfassda' soll duch 'ist|' ersetzt werden...) Immer wenn ich bisher noch ein | ran gehangen habe, dann ist das Programm abgestürzt...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
035
26.04.2004, 11:44 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


strstr sucht dir ja quasi die stelle raus die du ersetzen willst.
in pablos beispiel wird das ja nur einmal durchlaufen.

wenn du willst das der das ggf. mehrmals durchsucht musst du halt ne schleife drum packen die das ganze so lange abarbeitet bis strstr nichts mehr findet (also NULL) zurückliefert
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
036
26.04.2004, 12:00 Uhr
~Piet
Gast


Und welche schleifenart ist die beste?? ich habe es so versucht und es funzt nicht...


C++:
char* ersetzen(const char* re, const char* repl, const char* in, char* buffer) {
    char *pdest;
    pdest = strstr(in, re);

    while(!(pdest==NULL))
    {
        char* ptr;

..............................
..............................
..............................

             return buffer;
}


So funzt es nicht, wie kann ichs besser machen??
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
037
26.04.2004, 14:13 Uhr
~Piet
Gast


Hat zufällig noch irgendjemand eine Idee?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
038
26.04.2004, 15:00 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


wir haben dir doch schon alles gesagt was du wissen müsstest.
naja egal hab kein bock mich gros mit pablos code auseinanderzusetzen
ungetestet so, der aufrufer muss garantieren das inp genug speicherplatz zur verfügung stellt. und vorsicht ungetestet


C++:
int ersetzen(char *such, char *neu, char *inp){
int flag,rv=0;
char *p,*q,*r,*tmp;
    tmp=new char[strlen(inp)+1];
    for(p=inp;*p;++p){
        flag=1;    
        for(q=such,r=p;*q&&*r&&flag;++q,++r)if(*q-*r)flag=0;
    
        if(flag){
            for(q=tmp;*r;++q,++r)*q=*r;
            *q='\0';
            for(q=neu,r=p;*q;++q,++r)*r=*q;
            for(q=tmp;*q;++r,++q)*r=*q;
            *r='\0';
            ++rv;
        }        
    }

    delete [] tmp;

    return rv;
}


--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] [ 2 ] [ 3 ] > 4 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: