Schnell string Vergleich in C

Momentan habe ich diese Art von Schleife

while(1)
{
    generate_string(&buffer);

    for(int i = 0; i < filelines; i++)
    {
        if(strcmp(buffer,line[i]) == 0)
        {
           /*  do something  */
        }
    }
}

Ich habe eine Datei mit ein paar Millionen Saiten(die hoffentlich sollte um die Hälfte gekürzt werden irgendwann bald) die Anzahl aller dieser Zeichenfolgen gespeichert in filelines

line[i] ist im Grunde, wo die Zeichenkette gespeichert ist.

Derzeit, aufgrund der Vergleich dieser million strings, Funktion generate_string(&buffer); ausgeführt wird, etwa 42 mal pro Sekunde.
Gibt es einen schnelleren Weg, zu tun, string Vergleich in C?

  • Wenn Sie Sortieren können Linien, sicher.
  • Wenn Sie hash, hash.
  • Nein, denn die eigentliche Frage hier ist nicht "wie das vergleichen von zwei strings", es ist "wie testen Sie eine Zeichenfolge für die Einkapselung in eine große Sammlung von strings".
  • Nur, wenn die Saiten Größen gleich sind, das kann man doch if((buffer[0] == line[0]) && (buffer[1] == Zeile[1]) && ...). Das ist schneller als Aufruf strcmp().
  • Ich lief ein Profil auf wakkerbot: es nutzt 200ms zu tun 2M-lookups in einer 500K Wörterbuch der bekannten Wörter. Einschließlich einer abschließenden strcmp() an die passende hashtable-Eintrag.
InformationsquelleAutor farmdve | 2012-05-23
Schreibe einen Kommentar