#include #include #include #include #ifndef _CLASS_DIFF_ #define _CLASS_DIFF_ #define FIRST_STRING true #define SECOND_STRING false using namespace std; template class SFNDiff { typedef basic_string String; typedef list Lstring; typedef CHAR Char; private: Lstring m_text1; String m_originalText1; list m_text2; Lstring m_originalText2; protected: const Lstring &GetText(bool bFirstTextAsked) const { return bFirstTextAsked?m_text1:m_text2; } String ToString(bool bFirstTextAsked) const { const Lstring & text = GetText(bFirstTextAsked); Lstring::const_iterator it; String result; for(it = text.begin();it!=text.end();it++) { result << *it; } return result; } virtual bool IsSeparator(const Char &elem) const { return true; } virtual void StoreWord(const String& s,bool isWord1) { Lstring& result = isWord1?m_text1:m_text2; result.erase(); String sWord; Lstring::const_iterator it = s.begin(); while(it!=s.end()) { if(!IsSeparator(*it)) result.push_back(*it); it++; } } const String& GetString(bool bFirstWord) const { return bFirstWord?m_originalText1:m_originalText2; } public: SFNDiff(String iw1,String iw2):m_originalText1(iw1), m_originalText2(iw2) { StoreWord(iw1,FIRST_STRING); StoreWord(iw2,SECOND_STRING); } String ToString() { String result; result << "{SFNDiff["; result << m_originalText1; result << ","; result << m_originalText2; result << "]="; result << ToString(FIRST_STRING); result << ","; result << ToString(SECOND_STRING); result << "}"; return result; } }; #endif bool IsNbArgValid(int argc) { return argc==3; } int main(int argc,char* argv[]) { if(IsNbArgValid(argc)) { SFNDiff diff(argv[1],argv[2]); cout << diff.ToString() << endl; }else cout << argv[0] << " is excpecting 2 arguments" << endl; return 0; }