Editor.h
#pragma once #include <string> #include <iostream> using std::string; using std::cout; using std::cin; using std::endl; class Editor { public: Editor(void); Editor(const string& strData); ~Editor(void); int Insert(string::size_type nPos, string& strData); int Find(const string& strData); int Remove(const string& strData); int Replace(const string& strSource, string& strTarget); void Editor::Output() const; int MoveToFirst(); int MovetoLast(); private: string m_strContent; string::size_type m_nPos; string::size_type m_nNextPos; };
Editor.cpp
#include "StdAfx.h" #include "Editor.h" Editor::Editor(void) :m_strContent(""),m_nPos(0),m_nNextPos(0) { } Editor::Editor(const string& strData) :m_strContent(strData),m_nPos(0),m_nNextPos(0) { } Editor::~Editor(void) { } int Editor:: Insert(string::size_type nPos, string& strData) { m_strContent.insert(nPos, strData); return 0; } int Editor:: Find(const string& strData) { m_nPos = m_strContent.find(strData, m_nNextPos); if(m_nPos != string::npos){ cout << "Find " << strData << " at" << m_nPos << endl; m_nNextPos += strData.length(); } else{ cout << "Cant find" << strData << endl; m_nNextPos = 0; } return 0; } int Editor:: Remove(const string& strData) { m_nPos = m_strContent.find(strData, m_nNextPos); if(m_nPos != string::npos){ cout << "Find" << strData << "at" << m_nPos << endl; m_strContent.erase(m_nPos, strData.length()); } else{ cout << "Can't find" << strData << endl; m_nNextPos = 0; } return m_nPos; } int Editor:: Replace(const string& strSource, string& strTarget) { m_nPos = m_strContent.find(strSource, m_nNextPos); if(m_nPos != string::npos){ m_strContent.replace(m_nPos, strSource.length(), strTarget); m_nNextPos += strTarget.length(); }else{ m_nNextPos = 0; } return m_nPos; } void Editor::Output() const{ cout << m_strContent << endl; } int Editor:: MoveToFirst(){ m_nPos = m_nNextPos = 0; return 0; } int Editor:: MovetoLast(){ m_nPos = m_nNextPos = m_strContent.length()-1; return 0; }
main.cpp
#include "stdafx.h" #include "Editor.h" int _tmain(int argc, _TCHAR* argv[]) { Editor oEditor("www.du.com www.baidu.com"); oEditor.Insert(4, string("bai")); string::size_type nPos = oEditor.Find("baidu"); cout << nPos << endl; /* oEditor.MoveToFirst(); nPos = oEditor.Remove("baidu"); oEditor.Output(); nPos = oEditor.Remove("baidu"); oEditor.Output(); */ oEditor.MoveToFirst(); oEditor.Replace("baidu",(string)"sina"); oEditor.Output(); oEditor.Replace("baidu",(string)"sina"); oEditor.Output(); getchar(); return 0; }