Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Verstehe den Sinn nicht

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 <
000
13.08.2006, 23:23 Uhr
~Holger80
Gast


Hallo Zusammen,

ich habe hier einen Code vorliegen, habe aber Probleme zu verstehen wie es genau arbeitet.
Es geht dabei um einen Code der in einem anderen Code, die Kommentare sucht und entfernt sowie den Code als einen Fliesstext ausgibt.
Es wäre nett wenn mir mal jemand erklären könnte, wie es genau arbeitet und was für ein Idee dahintersteckt.



C++:
char *first = text;
    while( ( first = strstr( first, "//" ) ) ) {

        char *remove = first;

        if( first != text ) {

            if( *( first - 1 ) == '\n' ) {

                --first;
            }
        }
        while( ( *remove != '\n' ) && ( *remove != '\0' ) ) {

            ++remove;
        }
        strcpy( first, remove );
    }

    first = text;

    while( ( first = strstr( first, "
/*" ) ) ) {

        char *remove = strstr( first, "*/
" );

        if( !remove ) {

            printf( "
Compouned statement \"*/\" missing!" );
            break;
        }

        strcpy( first, remove + 2 );
    }

    first = text;

    while( *first ) {

        if( *first == '\n' ) {

            *first = ' ';
        }

        ++first;
    }

    first = text;

    while( *first ) {

        for( char *i = first; isspace( *i ); ++i ){

        if( ( i - first ) > 1 ) {

            strcpy( first, i );
            first = i;

        } else {

            first++;
        }
    }


Gruesse
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
14.08.2006, 01:35 Uhr
Bruder Leif
dances with systems
(Operator)


Naja, eigentlich ist der Code recht einfach gestrickt:

Erst mal eine Schleife, um alle Ganzzeilenkommentare (//) zu entfernen (mit kleinem [unnötigen] Trick: Wenn wir NICHT am Anfang des Textes sind, überprüfen wir noch das Zeichen vorher, und wenn es ein \n ist, schmeißen wir das auch gleich raus). Dann eine zweite Schleife, die alle C-Style-Kommentare entfernt, dann noch eine, die \n entfernt, und eine letzte für Whitespaces, die Stringliterale "übersieht".

Insgesamt also vier große Schleifen, die andauernd einen Haufen Text in der Gegend rumkopieren. Böse. Schlechter Stil, langsam und buggy.
--
Mit 40 Fieber sitzt man nicht mehr vor dem PC.
Man liegt im Bett.
Mit dem Notebook.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ 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: