2016-11-08 2 views
1

Ich habe eine Datenbeutel Struktur erstellt. Ich lese den Text einer Datei und konvertiere in lexikografische Reihenfolge. Um dies zu tun, muss ich zwei Zeichenfolgen in Kleinbuchstaben umwandeln, um sie zu vergleichen (Eins für den aktuellen Knoten und eins für den Knoten, der daneben steht). Aber mein Problem ist, wenn ich große Textdateien habe, muss es die Zeichenfolge in Kleinbuchstaben für jeden Knoten konvertieren, den ich einfügen und manchmal dauert es eine lange Zeit zu verarbeiten. Ich habe mich gefragt, ob es bessere Möglichkeiten gibt, dies anzupassen, um die Spielzeit zu erhöhen.Debug-Zeit Ausgabe

void insert(string v) 
{ 
    if(head == NULL){ //empty list 
     head = new BagNode; 
     head->dataValue = v; 
     //head->dataCount = 0; 
     head->next = NULL; 

    } 
    else 
    { 
      BagNode * n = new BagNode;  // new node 
      n->dataValue = v; 
      BagNode * current = head;   //for traversal 
      //current = head; 
      n->dataCount = 0; 
       if(!isBefore(current->dataValue, v))  //new head 
       { 
        n->next = head; 
        head = n; 
       } 
       else{   //mid and tail insert 
        while(current->next && isBefore(current->next->dataValue,v)) 
        { 
         current = current->next; 
        } 
        n->next = current->next; 
        current->next = n; 

       } 
     }  
    } 

vergleichen die beiden Knoten

bool isBefore(string a, string b) 
{ 
     transform(a.begin(), a.end(), a.begin(), ::tolower); 
     transform(b.begin(), b.end(), b.begin(), ::tolower); 
     if(a == b) { 
      return true; 
     } 
     else { 
      return false; 
     } 
    } 
+0

Behalten Sie in einem Knoten sowohl die ursprüngliche als auch die konvertierte Zeichenfolge bei. Die erste für Anwendungszwecke, die zweite nur für Vergleiche. Gehen Sie beim Einfügen wie folgt vor: Einmal konvertieren, nach dem richtigen Ort suchen, Original einfügen und konvertieren. Sie werden wie üblich Raum für Zeit tauschen. – GMichael

+1

'NULL' ist für C99. Verwenden Sie 'nullptr' in C++ 11. BTW sollten Sie C++ [Standardcontainer] (http://en.cppreference.com/w/cpp/container) & [Smartpointer] (http://en.cppreference.com/w/cpp/memory) –

+1

auch verwenden Kompiliere mit allen Warnungen und Debug-Informationen ('g ++ -Wall -g' wenn [GCC] (http://gcc.gnu.org/) ....) und verwende den Debugger (' gdb') & [valgrind] (http://valgrind.org/) –

Antwort

0

ein Programm in C oder C debuggen ++ mit g ++ oder gcc

1) gcc/g++ -g myprogram.c/myprogram.cpp

das Ergebnis a.out

wird

2) gdb a.out

Ich hoffe es hilft dir!

+1

Dies ist ein Kommentar (ganz ähnlich wie bei mir) keine Antwort –