2017-11-16 1 views
1

Ich habe zwei Std :: Strings und ich möchte wissen, was der Unterschied zwischen ihnen. Ich möchte wissen, was geändert, nachdem Benutzer gelöscht oder etwas eingefügt und dass nach diesen Informationen in meinem Command Klasse setzen:Rückgängig/Wiederholen der Implementierung. Wie zwei std :: Strings zu vergleichen

int currentPosition; 
std::string substr; 
std::string typeofOperation; //Erased or Inserted 

Also muss ich wissen, welche Art von Teilkette eingefügt oder gelöscht wurde und in welcher Position.

+1

Bitte spam keine Tags. Dies ist definitiv nicht C, ich sehe keinen ** Link zur Qt-Bibliothek (die eine eigene String-Klasse btw hat) und es gibt auch keine Anzeichen für eine Algorithmus-Frage. –

+0

Ich möchte einen einfachen Texteditor mit Undo/Redo Buttons erstellen. Ich habe bereits einen Stapel- und Klassenbefehl erstellt, der minimale Informationen über Textänderungen speichert (gelöschte/eingefügte Teilzeichenfolge, Position und Art der gerade ausgeführten Operation). Jetzt muss ich zwei Strings (früher und bearbeitet) vergleichen und prüfen, was gelöscht wurde oder eingefügt wurde und wo (an welcher Position). Zum Beispiel str1 = "Hallo Welt" und str2 = "Hallo Welt". Im Ergebnis brauche ich substr = "ld" und int position = 9. –

+0

@ P.Tsvetov: Warum geht das so? Damit dieses "ld" eingefügt werden kann, muss es etwas da sein, richtig? Warum erfassen Sie nicht den Vorgang des Einfügens von Text und erstellen Sie Ihr Diff auf diese Weise? –

Antwort

0

Hier ist ein einfacher, naiver Ansatz Sie den Einstieg:

#include <iostream> 
#include <string> 
using namespace std; 
int main() { 
    string str1 = "hello world"; 
    string str2 = "hello wor"; 
    string substr = ""; 
    int pos = -1; 
    const unsigned int larger_size = (str1.size() > str2.size()? str1.size() : str2.size()); 

    for(unsigned int i = 0; i < larger_size; ++i) 
    { 
      if(str1[i] != str2[i]) 
      { 
       if(pos == -1) 
        pos = i; 
       substr += str1[i]; 
      } 
    } 
    cout << substr << " " << pos << endl; 
    return 0; 
} 

Ausgang:

ld 9


PS: Ich weiß nicht, ob Es lohnt sich jedoch, Ihr Ziel zu erreichen, überprüfen Sie den Kommentarbereich Ihrer Frage. Ich habe das einfach generisch beantwortet.

+0

Vielen Dank. Ich denke, dass es genau das ist, was ich von meinem Dozenten gefordert habe. Aber wenn ich zum Beispiel s1 = "Hallo Welt" und s2 = "Hallo meine Welt" ausprobiere gibt es mir Welt 6 in der Ausgabe. –

Verwandte Themen