tutorials.de Buch-Aktion 05/2012
Like Tree2Danke
  • 1 Beitrag von deepthroat
  • 1 Beitrag von sheel
ERLEDIGT
NEIN
ANTWORTEN
12
ZUGRIFFE
371
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    DarKo87 DarKo87 ist offline Mitglied
    Registriert seit
    Nov 2007
    Beiträge
    15
    Moin,

    Ich hab momentan das Problem das ich versuche verschiedene strings in einer Zeile zu vergleichen. Find aber keinen richtigen ansatz dafür.

    Bis jetzt hab ich nur das die Zeile eingelesen wird und dann getrennt wird nach \n \t und leerzeichen.

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    void *t_read(void){
     
        char *ptr;
     
        size_t len = 0;
        while((line_val=getline(&line_ptr, &len, ofile)) != EOF){
            ptr = strtok(line_ptr, "\n\t ");
        }
        return 0;
     
    Dieser Beitrag und sein Inhalt sind Geistiges Eigentum von DarKo87

    Mit freundlichen Grueßen / Best regards

    DarKo87

  2. #2
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.168
    Hi.

    Also da mußt du schon etwas genauer werden.

    Was soll wie verglichen werden?

    Gruß
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  3. #3
    DarKo87 DarKo87 ist offline Mitglied
    Registriert seit
    Nov 2007
    Beiträge
    15
    Hey Deep,

    Du bist ja auch immer sehr zügig im antworten

    Also ich habe z.B. ne Logilfe in der bestimmte Fehler eingetragen sind.
    Eine zeile könnte wie folgt aussehen.

    Code :
    1
    
    /../../filename/ /../fehler/bla/ /../fehler/bla/

    Hier geht es darum, das also von / zu / heraus gefiltert wird. Also diese Angabe genommen wird um die Zeile anzugeben.

    Danach sollen alle weiteren Strings einfach nur verglichen werden. Das heißt, ich habe Parameter das von / zu / gelesen werden soll und dann soll er einfach die Zeile weiter durchgehen und abfragen wo nochmal der selbe string vorkommt oder nicht.

    Also oben in dem Beispiel, wären nach der pfadangabe die beiden weiteren strings gleich, somit ein fehler.

    Ich hoffe, es ist halbwegsverständlich :-/

    Gruß
     
    Dieser Beitrag und sein Inhalt sind Geistiges Eigentum von DarKo87

    Mit freundlichen Grueßen / Best regards

    DarKo87

  4. #4
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.168
    Hi.

    Evtl. solltest du dafür einfach reg. Ausdrücke verwenden.

    Die Zeile nur nach "\n\nt " zu trennen funktioniert spätestens dann nicht mehr wenn ein Leerzeichen oder Tab in einem der Pfade enthalten ist.

    Gruß
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  5. #5
    DarKo87 DarKo87 ist offline Mitglied
    Registriert seit
    Nov 2007
    Beiträge
    15
    Zitat Zitat von deepthroat Beitrag anzeigen
    Die Zeile nur nach "\n\nt " zu trennen funktioniert spätestens dann nicht mehr wenn ein Leerzeichen oder Tab in einem der Pfade enthalten ist.
    Also dies sollte eigentlich nicht vorkommen. Aber wie meinst du das mit den Reg. ausdrücken?
    Wie kann ich den am besten das ganze in der Zeile vergleichen?
     
    Dieser Beitrag und sein Inhalt sind Geistiges Eigentum von DarKo87

    Mit freundlichen Grueßen / Best regards

    DarKo87

  6. #6
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.168
    Zitat Zitat von DarKo87 Beitrag anzeigen
    Also dies sollte eigentlich nicht vorkommen.
    Aha. "Eigentlich"
    Zitat Zitat von DarKo87 Beitrag anzeigen
    Aber wie meinst du das mit den Reg. ausdrücken?
    Wie kann ich den am besten das ganze in der Zeile vergleichen?
    http://de.wikipedia.org/wiki/Regul%C3%A4rer_Ausdruck

    Gruß
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  7. #7
    DarKo87 DarKo87 ist offline Mitglied
    Registriert seit
    Nov 2007
    Beiträge
    15
    Zitat Zitat von deepthroat Beitrag anzeigen
    Hmm, ja danke Werde mich da mal einarbeiten.
    Trotzdem bleibt immer noch das Problem, das ich die Lines in seine Strings zerlegen möchte.
    Mit strtok werden diese einfach abgeschnitten sobald ein Parameter erfüllt ist.
    Das ist leider nicht sinn und zweck der Sache :-/
     
    Dieser Beitrag und sein Inhalt sind Geistiges Eigentum von DarKo87

    Mit freundlichen Grueßen / Best regards

    DarKo87

  8. #8
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.168
    Zitat Zitat von DarKo87 Beitrag anzeigen
    Mit strtok werden diese einfach abgeschnitten sobald ein Parameter erfüllt ist.
    strtok ändert den originalen String und fügt \0 Zeichen ein.

    Man könnte also z.B. in einem Array oder einer Liste alle Token (bzw. Zeiger auf die Token) speichern.

    Bsp.
    Code c:
    1
    2
    3
    4
    
    char* token[20];
    int len = 0;
     
    for (token[len] = strtok(lineptr, ...); token[len]; token[++len] = strtok(NULL, ...));
    Gruß
    DarKo87 bedankt sich. 
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  9. #9
    DarKo87 DarKo87 ist offline Mitglied
    Registriert seit
    Nov 2007
    Beiträge
    15
    Damit hat es bestens geklappt. Hab das ganze noch ein wenig Modifiziert Und jetzt arbeite ich mich in die Regulären ausdrücke ein :-D

    Danke nochmal

    Zitat Zitat von deepthroat Beitrag anzeigen
    strtok ändert den originalen String und fügt \0 Zeichen ein.

    Man könnte also z.B. in einem Array oder einer Liste alle Token (bzw. Zeiger auf die Token) speichern.

    Bsp.
    Code c:
    1
    2
    3
    4
    
    char* token[20];
    int len = 0;
     
    for (token[len] = strtok(lineptr, ...); token[len]; token[++len] = strtok(NULL, ...));
    Gruß
    Gibt es eigentlich irgendwie auch die möglichkeit diese forschleife in eine while zu verpacken?
    Geändert von sheel (01.12.11 um 14:53 Uhr) Grund: Doppel
     
    Dieser Beitrag und sein Inhalt sind Geistiges Eigentum von DarKo87

    Mit freundlichen Grueßen / Best regards

    DarKo87

  10. #10
    Avatar von sheel
    sheel sheel ist offline Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.501
    Natürlich, jede Schleifenart kann in andere umgeschrieben werden:
    Code cpp:
    1
    2
    3
    4
    5
    6
    
    char* token[20];
    int len = 0;
     
    token[len] = strtok(lineptr, ...);
    while (token[len])
        token[++len] = strtok(NULL, ...);

    Gruß
    DarKo87 bedankt sich. 
    Netiquette (vA §15) und Nutzungsregeln (vA §4.8) einhalten! Programmcode in Codetags/Codeboxen.
    Sehr gute Beiträge bitte Bewerten (Stern darunter oder "Danke").
    "Funktioniert nicht" ist zu ungenau! Code, Fehlermeldungen, Verhalten des Programms, ...?

  11. #11
    DarKo87 DarKo87 ist offline Mitglied
    Registriert seit
    Nov 2007
    Beiträge
    15
    Zitat Zitat von sheel Beitrag anzeigen
    Natürlich, jede Schleifenart kann in andere umgeschrieben werden:
    Code cpp:
    1
    2
    3
    4
    5
    6
    
    char* token[20];
    int len = 0;
     
    token[len] = strtok(lineptr, ...);
    while (token[len])
        token[++len] = strtok(NULL, ...);

    Gruß
    Super danke ! Nun versuche ich nur noch zu verstehen was genau da passiert.
    Code :
    1
    
    token[len] = strtok(lineptr, ...);
    Hier wird der Pointer auf das erste Zeichen geschrieben, was in der zeile ist oder?#
    Code :
    1
    2
    
    while (token[len])
        token[++len] = strtok(NULL, ...);
    Hier wird nun jedes Zeichen mit NULL beschrieben, was den anforderungen entspricht?

    Aber wie kann die While nun beendet werden? Weil ja alle Zeichen auf 0 Geschrieben werde müsste sie doch bereits nach dem ersten durchlauf beenden?!
     
    Dieser Beitrag und sein Inhalt sind Geistiges Eigentum von DarKo87

    Mit freundlichen Grueßen / Best regards

    DarKo87

  12. #12
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.168
    Zitat Zitat von DarKo87 Beitrag anzeigen
    Code :
    1
    
    token[len] = strtok(lineptr, ...);
    Hier wird der Pointer auf das erste Zeichen geschrieben, was in der zeile ist oder?
    Ja.
    Zitat Zitat von DarKo87 Beitrag anzeigen
    Code :
    1
    2
    
    while (token[len])
        token[++len] = strtok(NULL, ...);
    Hier wird nun jedes Zeichen mit NULL beschrieben, was den anforderungen entspricht?
    Lies dir mal die Doku zu strtok durch, dann weißt du warum da NULL steht.
    Zitat Zitat von DarKo87 Beitrag anzeigen
    Aber wie kann die While nun beendet werden? Weil ja alle Zeichen auf 0 Geschrieben werde müsste sie doch bereits nach dem ersten durchlauf beenden?!
    Die Frage macht keinen Sinn, da du von einer falschen Prämisse ausgehst.

    Gruß
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  13. #13
    Avatar von sheel
    sheel sheel ist offline Moderator
    tutorials.de Moderator
    Registriert seit
    Jul 2007
    Beiträge
    4.501
    First of all, da werden har keine Zeichen beschrieben.
    token ist kein Array aus Einzelbuchstaben (also ein String),
    sondern ein Array aus Char-Pointern.
    Ein Potenzielles Array aus char-Arrays, potenzielles Array aus Strings.
    20 Strings.

    Das erste strtok füllt den ersten String.
    Das in der Schleife die anderen.

    NULL deshalb, damit die nächsten Teile vom gleichen Quellstring genommen werden
    (das ist einfach so festgelegt, dass dann NULL übergeben werden muss; siehe Doku).

    Wenn dann der letzte Teil in einen String gefüllt worden ist,
    liefert das nächste strtok selbst NULL zurück.
    Deshalb die Schleifenbedingung.
    Ist eine Kurzform von
    Code cpp:
    1
    
    while (token[len] != NULL)
     
    Netiquette (vA §15) und Nutzungsregeln (vA §4.8) einhalten! Programmcode in Codetags/Codeboxen.
    Sehr gute Beiträge bitte Bewerten (Stern darunter oder "Danke").
    "Funktioniert nicht" ist zu ungenau! Code, Fehlermeldungen, Verhalten des Programms, ...?

Ähnliche Themen

  1. c# strings vergleichen
    Von Alex F. im Forum .NET Café
    Antworten: 3
    Letzter Beitrag: 29.07.07, 12:31
  2. Strings vergleichen
    Von schiese im Forum PHP
    Antworten: 2
    Letzter Beitrag: 25.07.06, 20:01
  3. strings vergleichen
    Von sra im Forum Visual Basic 6.0
    Antworten: 4
    Letzter Beitrag: 05.05.04, 00:01
  4. 2 Strings vergleichen
    Von Rios im Forum PHP
    Antworten: 11
    Letzter Beitrag: 13.04.04, 17:47
  5. Strings vergleichen
    Von nadine im Forum Javascript & Ajax
    Antworten: 6
    Letzter Beitrag: 09.09.03, 16:11