#include #include #include #include const bool FIRST_STRING = true; const bool SECOND_STRING= false; template class SFNDiff { protected: typedef CHAR Char; typedef std::basic_string, std::allocator > String; typedef std::list Lstring; typedef typename Lstring::const_iterator LConstIterator; Lstring m_text1; String m_originalText1; Lstring m_text2; String 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); LConstIterator 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(result.begin(),result.end()); String sWord; LConstIterator it = (LConstIterator) 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.assign(iw1.begin(),iw2.end()); m_originalText2.assign(iw2.begin(),iw2.end()); 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; } }; bool IsNbArgValid(int argc) { return argc==3; } int main(int argc,char* argv[]) { if(IsNbArgValid(argc)) { SFNDiff diff(argv[1],argv[2]); std::cout << diff.ToString() << std::endl; }else std::cout << argv[0] << " is excpecting 2 arguments" << std::endl; return 0; }