Ergebnis 1 bis 9 von 9
  1. #1
    NoClose Wurm
    Registriert seit
    24.09.2008
    Beiträge
    183

    Standard Alternative zu find()

    Moin,

    kennt wer eine Alternative zu find?

    Mein Problem ist das ich ein char array habe:



    und da ich einen String in der Funktion suchen und ersetzen will, dachte ich mir ich wandel das mal schnell in nen string um:



    und ersetze durch platzhalter.replace() einen Teilstring. Ich hatte es durch diese Weise auch hinbekommen, das Problem war schlicht und ergreifend, das das Programm abstürzte und eine Fehlermeldung ausspuckte... (war iwas mit Terminated blaaa, konnte ich mir nicht merken und gespeichert habs auch nicht weil ich weiterprobiert habe )

    Nun gut, kennt wer noch möglichkeiten?

  2. #2
    Bad Times Virus
    Registriert seit
    14.03.2009
    Beiträge
    579

    Standard

    Code:
    while (*line++){
    if (line[i]='B') && (line[i+1]='C') )
      break;
    i++;
    }
    damit hättest du das startelement des gesuchten Teilstrings(hier "BC") in i.ist aber ne bescheuerte methode.

  3. #3

    Registriert seit
    17.06.2009
    Beiträge
    559

    Standard

    Mir fällt da auf Anhieb noch strchr() ein.
    Geändert von inout (30.06.2009 um 17:25 Uhr)

  4. #4
    NoClose Wurm
    Registriert seit
    24.09.2008
    Beiträge
    183

    Standard

    danke, ich guck mir mal strchr() an, weil die Methode von dir wacked, bringt mir leider nichts bei teilstrings sondern nur bei einzelnen zeichen

  5. #5
    Der mit Anatidaephobie Avatar von blackberry
    Registriert seit
    11.07.2008
    Beiträge
    2.350

    Standard

    Ich hab mal meine alten Sourcecodes durchstöbert!

    Code:
    #include <cstdio>
    
    void* malloc(unsigned int);
    void* memcpy(void*, const void*, unsigned int);
    int memcmp(const void*, const void*, unsigned int);
    unsigned int strlen(const char*);
    
    char* str2lower(char* buffer, int len)
    {
        for(int x=0;x<strlen(buffer);x++)
            if (buffer[x] < 91 && buffer[x] > 64)
                buffer[x] += 32;
        return buffer;
    }
    
    char* str2upper(char* buffer)
    {
        for(int x=0;x<strlen(buffer);x++)
            if (buffer[x] < 123 && buffer[x] > 96)
                buffer[x] -= 32;
        return buffer;
    }
    
    bool isValidSubstrKey(int a, unsigned int b, unsigned int len)
    {
        if (((a < 0) ? -a : a) > len)
            return false;
        if (a < 0)
            return -a >= b;
        return len >= a + b;
    }
    
    char* substr(FILE* fp, int a, unsigned int b)
    {
        int pos = ftell(fp);
        fseek(fp, 0, SEEK_END);
        int len = ftell(fp);
        fseek(fp, pos, SEEK_SET);
        if (b == 0)
            b = (a < 0) ? -a : len - a;
        char* buffer = (char*) malloc(b);
        if (buffer == NULL || !isValidSubstrKey(a, b, len))
            return NULL;
        if (fseek(fp, a, SEEK_SET) != 0)
            return NULL;
        fread(buffer, 1, b, fp);
        buffer[b] = 0;
        fseek(fp, pos, SEEK_SET);
        return buffer;
    }
    
    char* substr(const char* str, int a, unsigned int b, int len)
    {
        if (b == 0)
            b = (a < 0) ? -a : strlen(str) - a;
        char* buffer = (char*) malloc(b);
        if (buffer == NULL || !isValidSubstrKey(a, b, strlen(str)))
            return NULL;
        memcpy(buffer, &str[(a < 0) ? strlen(str) + a : a], b);
        buffer[b] = 0;
        return buffer;
    }
    
    int strpos(const char* str, const char* find, int offset, int len)
    {
        int o = - strlen(find),
            x = 0;
        for(;offset<strlen(str);offset++)
            if (x == strlen(find))
                break;
            else if (find[x] != str[offset])
                x = 0;
            else
                x++;
        return (offset == strlen(str)) ? -1 : offset + o;
    }
    
    int strpos(FILE* fp, const char* find, int offset)
    {
        int o = - strlen(find),
            p = ftell(fp),
            x = 0;
        char str = 0;
        fseek(fp, 0, SEEK_END);
        int len = ftell(fp);
        fseek(fp, offset, SEEK_SET);
        for(;offset<len;offset++)
        {
            fread(&str, 1, sizeof(str), fp);
            if (x == strlen(find))
                break;
            else if (find[x] != str)
                x = 0;
            else
                x++;
        }
        fseek(fp, p, SEEK_SET);
        return (offset == len) ? -1 : offset + o;
    }
    
    bool strcmp2(const char* a, const char* b, int len)
    {
        if (strlen(a) != strlen(b))
            return false;
        return memcmp(a, b, strlen(a)) == 0;
    }
    strpos interessiert dich vielleicht.
    Wenn du eine Erklärung dazu willst dann frag einfach oder adde mich in ICQ.

    PS: wie gesagt: der Code ist _alt_ - also nicht wundern wenn es nicht optimiert ist oder eher etwas deletant aussieht - da hab ich noch geübt


    mfG. BlackBerry

    PDFTT cr3w a.E. — ReiDC0Re, lindor, Sera, berry
    please do feed the trolls crew and elk
    Ehrenwerte Mitglieder im Ruhestand: OpCodez, SFX.
    "Was sich blackberry gerade denkt" — Vorsicht! Frei laufender Wahnsinn!
    Zitat von fuckinghot19: "PS: Blackberry ist auf FH der Trollkönig ^^."
    An dieser Stelle danke ich all meinen Fans und Hatern gleichermaßen ^.^

  6. #6
    NoClose Wurm
    Registriert seit
    24.09.2008
    Beiträge
    183

    Standard

    ich füg dich mal eben hinzu Blackberry, da ich strchr() doch nicht gebrauchen kann und für strpos() nur seiten finde die mit php zu tun haben...

  7. #7
    Bad Times Virus
    Registriert seit
    14.03.2009
    Beiträge
    579

    Standard

    strtok() gibbet doch auch noch.

  8. #8
    Der mit Anatidaephobie Avatar von blackberry
    Registriert seit
    11.07.2008
    Beiträge
    2.350

    Standard

    Zitat Zitat von Darkmiller Beitrag anzeigen
    und für strpos() nur seiten finde die mit php zu tun haben...
    Lustigerweise habe ich an PHP's strpos gedacht, als ich das geschrieben habe

    Die Parameter folgen der selben Struktur.

    http://de3.php.net/function.strpos

    PDFTT cr3w a.E. — ReiDC0Re, lindor, Sera, berry
    please do feed the trolls crew and elk
    Ehrenwerte Mitglieder im Ruhestand: OpCodez, SFX.
    "Was sich blackberry gerade denkt" — Vorsicht! Frei laufender Wahnsinn!
    Zitat von fuckinghot19: "PS: Blackberry ist auf FH der Trollkönig ^^."
    An dieser Stelle danke ich all meinen Fans und Hatern gleichermaßen ^.^

  9. #9
    Jahrelanger Discopumper Avatar von aKiller47
    Registriert seit
    05.09.2008
    Beiträge
    94

    Standard

    Wenn ihr hier wirklich mal ohne naive Textsuche arbeiten wollt , dann nehmt den KMP algo der is hamma
    We don't talk to police
    We don't make a peace bond

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •