现在的位置: 首页 > 综合 > 正文

c++ stl Editor自定义类 对字符串 查找 替换 删除 插入

2013年01月23日 ⁄ 综合 ⁄ 共 2221字 ⁄ 字号 评论关闭

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;
}

抱歉!评论已关闭.