⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gstring.h

📁 自编的一个String类
💻 H
📖 第 1 页 / 共 2 页
字号:
{   String Target1, Target2;   int Ends; // 0 neither boundary, 1 last, 2 first, 3 both   bool Selected, ChangeNext;public:   StringList_Range(StringList& sl, const String& t1, const String& t2,      int ends) : TaggedStringList(sl), Target1(t1), Target2(t2),      Ends(ends), Selected(false), ChangeNext(false) {}   bool Select(const StringListItem& SLI) const;};/*class MaskedStringList : public TaggedStringList{   String Mask;public:   MaskedStringList(StringList& sl)      : TaggedStringList(sl), Mask((sl.size()+7)/8, (char)0) {}   MaskedStringList(const MaskedStringList& tsl)      : TaggedStringList(tsl.SL), Mask(tsl.Mask) {}   friend ostream& operator<<(ostream& os, MaskedStringList& tsl);   friend class StringList;};*/// Carry out a one of a series of translations// case independent not done yetclass SubstitutionList{   StringList input;        // what we are searching for   StringList output;       // what we convert to   bool first;              // next input will be an input one   bool ci;                 // true for case independentpublic:   SubstitutionList() : first(true), ci(false) {}   SubstitutionList& operator<<(const String& S);   void SetCaseIndependent(bool cix = true) { ci = cix; }   void CleanUp()      { input.CleanUp(); output.CleanUp(); first = true; ci = false;}   friend class TaggedStringList;};// GString is something we can match a string toclass GString{protected:   GString() {}public:   virtual ~GString() {}   NotGString operator~();   PlusGString operator+(const GString& g);   GTGString operator>(const GString& g);   LTGString operator<(const GString& g);   AndGString operator&(const GString& g);   OrGString operator|(const GString& g);   XorGString operator^(const GString& g);   PlusGString operator+(const ExplicitString& es);   GTGString operator>(const ExplicitString& es);   LTGString operator<(const ExplicitString& es);   AndGString operator&(const ExplicitString& es);   OrGString operator|(const ExplicitString& es);   XorGString operator^(const ExplicitString& es);   virtual bool Matches(const String& s) = 0;   virtual bool Matches_i(const String& s, unsigned int&)      { return Matches(s); }   virtual int ShortLong() const { return 0; }      // -1 = short, +1 = long   virtual unsigned int FixedLength() const { return String::npos; }   virtual void Collect(const String& s, StringList& SL);   virtual void Translate(String& s, StringList& SL);};class ExplicitString : public GString{   const String S;public:   ExplicitString(const String& s) : S(s) {}   ExplicitString(const char* s) : S(s) {}   ExplicitString(const ExplicitString& es) : S(es.S) {}   bool Matches(const String& s);   unsigned int FixedLength() const { return S.size(); }   void Translate(String& s, StringList& SL);   ~ExplicitString() {}};class PairGString : public GString{protected:   const GString* G1;   const GString* G2;   PairGString(const GString* g1, const GString* g2) : G1(g1), G2(g2) {}   int ShortLong() const;};class AndGString : public PairGString{public:   AndGString(const GString* g1, const GString* g2) : PairGString(g1, g2) {}   bool Matches(const String& s);   unsigned int FixedLength() const;   void Collect(const String& s, StringList& SL);   void Translate(String& s, StringList& SL);};class OrGString : public PairGString{   int which;      // 1 for first branch, 2 for secondpublic:   OrGString(const GString* g1, const GString* g2) : PairGString(g1, g2) {}   bool Matches(const String& s);   unsigned int FixedLength() const;   void Collect(const String& s, StringList& SL);   void Translate(String& s, StringList& SL);};class XorGString : public PairGString{   int which;      // 1 for first branch, 2 for secondpublic:   XorGString(const GString* g1, const GString* g2) : PairGString(g1, g2) {}   bool Matches(const String& s);   unsigned int FixedLength() const;   void Collect(const String& s, StringList& SL);   void Translate(String& s, StringList& SL);};class PlusGString : public PairGString{protected:   int split;     // where the string was splitpublic:   PlusGString(const GString* g1, const GString* g2) : PairGString(g1, g2) {}   bool Matches(const String& s);   unsigned int FixedLength() const;   void Collect(const String& s, StringList& SL);   void Translate(String& s, StringList& SL);};class GTGString : public PlusGString{public:   GTGString(const GString* g1, const GString* g2) : PlusGString(g1, g2) {}   GTGString2 operator>(const GString& g);   GTGString2 operator>(const ExplicitString& es);   bool Matches(const String& s);   bool Matches_i(const String& s, unsigned int& ix);};// this is for iterated '>' symbolsclass GTGString2 : public GTGString{public:   GTGString2(const GTGString* g1, const GString* g2) : GTGString(g1, g2) {}   GTGString2(const GTGString2* g1, const GString* g2) : GTGString(g1, g2) {}   GTGString2 operator>(const GString& g);   GTGString2 operator>(const ExplicitString& es);   bool Matches(const String& s);   bool Matches_i(const String& s, unsigned int& ix);};class LTGString : public PlusGString{public:   LTGString(const GString* g1, const GString* g2) : PlusGString(g1, g2) {}   bool Matches(const String& s);};class NotGString : public GString{   const GString* G;public:   NotGString(const GString* g) : G(g) {}   bool Matches(const String& s);   void Translate(String& s, StringList& SL);};class AnyString : public GString{protected:   String S;public:   uint size() const { return S.size(); }   bool Matches(const String& s);   AnyString() : S("") {}   AnyString(const AnyString& us) : S(us.S) {}   String Value() const { return S; }   void Translate(String& s, StringList& SL);};class LongestString : public AnyString{public:   int ShortLong() const { return 1; }   LongestString() : AnyString() {}   LongestString(const LongestString& ls) : AnyString(ls) {}   void operator=(const String& s) { S = s; }};class ShortestString : public AnyString{public:   int ShortLong() const { return -1; }   ShortestString() : AnyString() {}   ShortestString(const ShortestString& ss) : AnyString(ss) {}   void operator=(const String& s) { S = s; }};class FixedLengthString : public AnyString{   unsigned int N;public:   FixedLengthString(unsigned int n) : AnyString(), N(n) {}   FixedLengthString(const FixedLengthString& fs)      : AnyString(fs), N(fs.N) {}   bool Matches(const String& s);   unsigned int FixedLength() const { return N; }   void operator=(const String& s) { S = s; }};// match any string - don't keep copy of stringclass Dots : public GString{public:   bool Matches(const String&);};class LongestDots : public Dots{public:   int ShortLong() const { return 1; }};class ShortestDots : public Dots{public:   int ShortLong() const { return -1; }};class FixedLengthDots : public Dots{   unsigned int N;public:   FixedLengthDots(int n) : N(n) {}   FixedLengthDots(const FixedLengthDots& fld) : N(fld.N) {}   bool Matches(const String& s);   unsigned int FixedLength() const { return N; }};// match sequence of spaces, tabs, lf, cr - must be at least oneclass WhiteSpace : public GString{public:   int ShortLong() const { return 1; }     // try to match maximum amount   bool Matches(const String&);};// match sequence of spaces, tabs, lf, crclass OptionalWhiteSpace : public GString{public:   int ShortLong() const { return 1; }     // try to match maximum amount   bool Matches(const String&);};// put before String or character string to convert to GStringclass InitialGString{public:   ExplicitString operator+(const String& s) { return ExplicitString(s); }   ExplicitString operator>(const String& s) { return ExplicitString(s); }   ExplicitString operator<(const String& s) { return ExplicitString(s); }   ExplicitString operator&(const String& s) { return ExplicitString(s); }   ExplicitString operator|(const String& s) { return ExplicitString(s); }   ExplicitString operator^(const String& s) { return ExplicitString(s); }   ExplicitString operator+(const char* s) { return ExplicitString(s); }   ExplicitString operator>(const char* s) { return ExplicitString(s); }   ExplicitString operator<(const char* s) { return ExplicitString(s); }   ExplicitString operator&(const char* s) { return ExplicitString(s); }   ExplicitString operator|(const char* s) { return ExplicitString(s); }   ExplicitString operator^(const char* s) { return ExplicitString(s); }};// inlinesinline PlusGString GString::operator+(const ExplicitString& es)   { return operator+((const GString&)es); }inline GTGString GString::operator>(const ExplicitString& es)   { return operator>((const GString&)es); }inline LTGString GString::operator<(const ExplicitString& es)   { return operator<((const GString&)es); }inline AndGString GString::operator&(const ExplicitString& es)   { return operator&((const GString&)es); }inline OrGString GString::operator|(const ExplicitString& es)   { return operator|((const GString&)es); }inline XorGString GString::operator^(const ExplicitString& es)   { return operator^((const GString&)es); }inline GTGString2 GTGString::operator>(const ExplicitString& es)   { return operator>((const GString&)es); }inline GTGString2 GTGString2::operator>(const ExplicitString& es)   { return operator>((const GString&)es); }// Globalsextern InitialGString GS;extern Dots DOTS;extern LongestDots LDOTS;extern ShortestDots SDOTS;extern FixedLengthDots DOT;extern WhiteSpace WS;extern OptionalWhiteSpace OWS;// ********************** more search string list stuff ********************class StringList_GString : public TaggedStringList{   GString* Target;   // constructor is not accessible because GString tree will vanish at end   // of expression where it is built   // so we don't want a stand-alone StringList_GString object   StringList_GString(StringList& sl, GString& t)      : TaggedStringList(sl), Target(&t) {}public:   bool Select(const StringListItem& SLI) const      { return Target->Matches(SLI.ConstValue()); }   friend class StringList;};#endif// body file: liststr.cpp// body file: gstring.cpp

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -