2010-04-14 3 views
2

un peu une question vague mais je suis à la recherche de pointeurs sur la façon dont je peux générer des vecteurs de diff chaîne en C++. Le scénario est tel que compte tenu d'un paragraphe que je veux stocker les différentes différences (Modifier, couper copier coller, etc.) il passe en mode brouillon pour revoir l'historique de l'audit.comment générer des vecteurs de différence de chaîne?

Toutes les indications à cet égard seront très appréciées.

Répondre

4

Une idée en C++ polymorphisme:

class Action 
{ 
    public: 
    virtual void revert(std::string& base) = 0; 
}; 

class InsertAction : public Action 
{ 
    private: 
    int pos, len; 
    public: 
    InsertAction(int pos, std::string& base, const std::string& in) : len(in.size()), pos(pos) 
    { 
     base.insert(pos, in); 
    } 

    virtual void revert(std::string& base) 
    { 
     base.erase(pos,len); 
    } 
}; 

int main() 
{ 
    std::string text("hello !"); 
    std::cout << text << std::endl; 
    Action* action = new InsertAction(5, text, " world"); 
    std::cout << text << std::endl; 
    action->revert(text); 
    std::cout << text << std::endl; 
    delete action; 
} 

Vous pouvez ensuite ajouter et pop Actions à partir d'une file d'attente LIFO que vous le souhaitez. C'est un exemple simple, vous pourriez également essayer de lier plus à une chaîne au lieu de toujours passer en tant que param, mais c'est à votre propre conception. Je sais que ce n'est pas "réel" différant, mais je pense que cette solution est plus proche du problème que de stocker des différences de chaînes générales.

+0

Vous voudrez probablement un opérateur << (ostream &) 'et un' operator >> (istream &) 'pour la sérialisation. – MSalters

+0

+1 J'aime ça. – Konrad

+0

J'ai toujours pensé à ce modèle que le membre 'revert()' retournerait une 'Action', aussi? 'InsertAction' renverrait un' EraseAction' etc. (je ne suis pas sûr des avantages/inconvénients d'une manière contre l'autre, c'est juste que je n'ai jamais pensé de cette façon.) En tout cas, +1 de moi. – sbi

Questions connexes