welche Datenstruktur, welche Funktion ?



  • Hallo zusammen,

    ich habe weiterhin ein wenig Probleme mit meinem Code, der die Kommentare bzw die Symbole //,/* */ erkennen und entfernen soll. Ich habe diesen Code vorliegen:
    [cpp]
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>

    void removeComment(int x)
    {
    int i = 0;
    int z = 0;

    z = printf("%4d: %2x - %c\n",++i,x,x);
    char t = (char)z;

    //char * strstr(const char *s1, const char *s2); wie benutzen ?

    char suchstring[] = "//";
    }

    int Openfile()
    {
    int c;

    FILE *datei;
    datei=fopen("C:\\Ahnung.as", "r");

    if(datei != NULL)
    {
    while( (c=fgetc(datei)) != EOF)

    removeComment(c);
    }
    else {
    printf("Konnte Datei nicht finden bzw. öffnen!\n");
    }
    return EXIT_SUCCESS;
    }

    int main()
    {
    Openfile();
    }

    ich moechte in der Funktion removeComment die Funktion "strstr" str benutzen, um die Symbole zu erkennen. Ich habe aber Probleme die richtige Datenstruktur dafur zu finden bzw. die Parameter der Funktion anzugeben.
    Bin nicht so erfahren mit C.
    Wuerd mich echt freuen, wenn der eine oder andere mir ein wenig helfen wuerde.

    Gruesse



  • wenn du deiner RemoveComment( ) immer nur ein Zeichen gibst, wird es sich schwer tun, zwei aufeinanderfolgende '/' zu erkennen.

    zB so:

    #include <stdio.h>
    #include <string.h>
    
    int main( )
    {
        char text[ ] = "Blafasel\n// Comment\nbla bla // und ein Kommentar am ende\nnoch mehr blabla";
    
        printf( "\"%s\"", text );
    
        char *first = text;
    
        while( ( first = strstr( first, "//" ) ) ) {
    
            char *remove = first;
    
    	while( ( *remove != '\n' ) && ( *remove != '\0' ) ) {
    
                ++remove;
            }
    
            if( *remove == '\n' ) {
    
                ++remove;
            }
    
            strcpy( first, remove );
        }
    
        printf( "\"%s\"\n", text );
    }
    

    Greetz, Swordfish



  • @Swordfish: Danke Dir, das wird mir schon weiterhelfen.. 🙂



  • char t = (char)z;

    mach doch mal ansi c 🙂 (@ Swordfish: oder weisst du schon ob es mittlerweile erlaubt ist?)

    datei=fopen("C:\\Ahnung.as", "r");

    C:\\\ sollte es sein, damit es funktioniert...

    http://home.fhtw-berlin.de/~junghans/cref/FUNCTIONS/strstr.html



  • Moh schrieb:

    datei=fopen("C:\\Ahnung.as", "r");

    C:\\\ sollte es sein, damit es funktioniert...

    stimmt schon so. \\ reicht, damits am ende ein \ ist.


Anmelden zum Antworten