2017-10-12 2 views
0

Ich mache eine C++ Übung, wo ich eine Klasse implementieren muss, die eine schwache Version eines Vektors darstellt, der eine Zeichenfolge enthält. Eine der Anforderungen besteht darin, den Operator < und> nach den Regeln des lexographischen Vergleichs zu überladen.Wie lexographisch zwei Vektoren von Strings zu vergleichen?

Ich habe über den Algorithmus gelesen, aber ich verstehe es überhaupt nicht oder wie man es implementiert. Was macht einen Vektor < als die anderen? Was vergleiche ich mit den Strings? Die privaten Variablen sind string * array, size und capacity.

+0

[Werfen Sie einen Blick auf, wie cppreference es erklärt.] (Http://en.cppreference.com/w/cpp/algorithm/lexicographical_compare) Heck, sie geben sogar Codebeispiele. – user4581301

Antwort

0

Sie können strcmp (string a, string b) in der '<' Überladungsimplementierung verwenden.

class ClassName{ 
    /* 
    variables 

    constructors and methods 
    */ 

    bool operator<(ClassName obj){ 
    ClassName obj1; 
    if(strcmp(obj.str , obj1.str)<0) //less than zero as we are overloading "<" operator 
     return true;  //read - www.cplusplus.com/reference/cstring/strcmp 

    return false; 
    } 
}; 

ähnlich der „>“ Operator kann

+0

Ernsthaft? Hast du versucht, das zu kompilieren? Das ist weder C noch C++ – MSalters

+0

Habe ich schon erwähnt, dass 'obj1' default-initialisiert ist und vermutlich nur leer? – MSalters

0

Die Idee eines lexographical Vergleichs zwischen zwei Sequenzen überlastet ist, dass Sie die Sequenzen mit ihrem ersten Elemente zuerst sortieren und ggf. dann mit ihrem zweiten, etctera . Das heißt, wenn 0123,dann a<b. Wenn a[0]>b[0], dann a>b. Aber wenn a[0]==b[0], dann sehen Sie a[1] und b[1].

Wenn die Sequenz eine Folge von Zeichen ist (auch bekannt als Zeichenfolge), ist dies die übliche Wörterbuchreihenfolge. Aber derselbe Algorithmus funktioniert bei jeder Sequenz von sortierbaren Elementen.

Verwandte Themen