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 ]
010
23.04.2004, 12:45 Uhr
Pablo
Supertux
(Operator)


mit memcpy kopierst IMHO \0 gar nicht, deshalb strcpy oder strncpy
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
011
23.04.2004, 13:00 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


wiso soll ich mti dem memcpy die 0 nicht kopieren?
der kopiert doch genauso viele bytes wie ich ihm sage. Wenn ich also die \0 auch noch haben will dann einfach strlen+1 kopieren.
das wird ja vermutlich auch der grund sein warum strcpy langsamer ist, weil strlen ja erst noch ermittelt werden muss.
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
012
23.04.2004, 13:30 Uhr
~Piet
Gast


Kann mir wirklich niemand helfen? Ist wirklich wichtig... bin schon fast am verzweifeln...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
013
23.04.2004, 13:33 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


Ich hab bisher noch gar nicht genau gepeilt was du machen willst.
definiere mal bitte was genau deine funktion machen soll...
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
014
23.04.2004, 13:37 Uhr
Pablo
Supertux
(Operator)


ja, weil sonst kann ich auch nicht helfen.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
015
23.04.2004, 13:42 Uhr
~Piet
Gast


Was das Programm machen soll habe ich vorhin schon gepostet, aber hier hoffentlich verständlicher.

Ich lese zuerst einen String aus einer Datei ein. Der besteht aus einer Zeile und wird in 'in' abgespeichert, in ist vom Typ 'char in[10000]'. Diesen String übergebe ich an die Funktion 'ersetzen'.
In dieser Funktion wird ein bestimmter String (such) gesucht und durch einen anderen String (neu) ersetzt.
Da ich die Funktion wie folgt aufrufe:

Code:
char * p = ersetzen("abc","123",inp);


... wird der neue string in 'p' gespeichert

Ich will jetzt nur erreichen, dass ich nun wieder mit 'inp' weiter arbeiten kann und nicht mit 'p'. Und dazu muss ich char* p in char in[] umwandeln...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
016
23.04.2004, 14:03 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


also mal davon ausgegangen das beide (das zu ersetzende und das suchende die gleiche länge haben)

dann so

C++:
void ersetzen(char *such, char *neu, char *inp){
int flag;
char *p,*q,*r;
    for(p=inp;*p;++p){
        flag=1;    
        for(q=such,r=p;*q&&*r&&flag;++q,++r)if(*q-*r)flag=0;
    
        if(flag) //wenns nicht die gleiche länge hat muss du hier vorher erst alles kopieren dann über schreiben und wieder einfügen
            for(q=neu,r=p;*q;++q,++r)*r=*q;
    }

}

int main(){

char inp[10000]; //so gefällts mir gar nicht, besser wäre es ein buffer mit malloc zu allokieren aber du willst das ja so machen

//hier den scheiss aus der datei einlesen, wie auch immer du das machst hopsa ist am ende nullterminiert ich baller mal schnell was mit sprintf rein
sprintf(inp,"trlalala abc asdfasdf gmx ende feierabend");

printf("%s\n",inp);
ersetzen("abc","123",inp);
printf("%s\n",inp);

}


--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
017
23.04.2004, 14:03 Uhr
Pablo
Supertux
(Operator)


Okkkkkkkk
jetzt so on the fly


C++:
// ich werde nicht überprüfen, ob es Platz in buffer gibt oder nicht! Das
//könntest du zur Übung selber machen
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.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!

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


@Pablo
meins ist schöner
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
019
23.04.2004, 14:10 Uhr
~Piet
Gast


Die funktion ersetzen, die stimmt aber meiner Ansicht nach... die habe ich als tool bekommen... ich will ja anschließend nur mit dem Rückgabewert weiterarbeiten können. und dazu muss ich all das was nach dem Funktionsaufruf in p steht an inp irgendwie übergeben, weil ich danach noch eine Funktion aufrufe, an der ich inp übergeben muss. Aber da ich auch an die nächste Fkt. nicht einfach p übergeben kann, muss der Inhalt aus p vorher in inp
 
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: