文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>第11节 串的实现

第11节 串的实现

时间:2010-09-18  来源:chinazhangjie

// file: my_string.h

/* 主题: 串的实现
* 作者: chinazhangjie(邮箱: [email protected])
* 开发语言: C++
* 开发环境:Microsoft Visual Studio 2005
* 日期:2010.09.18
* 备注: 实现串的基本操作,但是没有实现串的匹配算法。
* 欢迎大家在我源码的基础上补充,并在开头声明(作者后)填上您的名字。
*/

#pragma once
#include
<vector>
#include
<iostream>
using std::ostream;
using std::vector;
using std::cout;
// 为避免和C ++ string 类冲突,因此命名为 my_string
class my_string
{
public:
typedef vector
<char> value_type;

public:
// default dtor
my_string(void);

// 使用const char* 构造 my_string
explicit my_string(const char* szstr);

// copy dtor
my_string(const my_string& str);

// 清空字符串
void clear();

// 判空
bool is_empty() const {
return m_str.size() == 0;
}

// 字符串连接
my_string& concat(const my_string& str);
my_string
& concat(const char* str);

/* 获得子串
* start 为起始位置
* len 是子串的长度
* 如果len > size() - start + 1)
* 那么 len = size() - start + 1
*/
my_string sub_str(size_t start,size_t len);

// 返回大小
size_t size() const {
return m_str.size();
}

// 运算符重载
my_string& operator += (const my_string& rhs);
my_string
& operator += (const char* rhs);

my_string
operator + (const my_string& rhs);
my_string
operator + (const char* rhs);

my_string
& operator = (const my_string& rhs);
my_string
& operator = (const char* rhs);

char& operator[] (size_t index);
const char& operator[] (size_t index) const;

// console display
friend ostream& operator << (ostream& out, const my_string& str);

public:
~my_string(void);
private:
value_type m_str;
// 串的存储使用stl vector
};

 

// file: my_string.cpp

#include
"StdAfx.h"
#include
"my_string.h"

my_string::my_string(
void)
{
}

my_string::my_string(
const char *szstr) {
size_t slen
= strlen(szstr);
for (size_t i = 0 ; i < slen; ++ i)
m_str.push_back(szstr[i]);
}

my_string::my_string(
const my_string& str) {
this->m_str = str.m_str;
}

void my_string::clear() {
m_str.clear();
return ;
}

my_string
& my_string::concat(const my_string &str) {
(
*this) += str;
return *this;
}

my_string
& my_string::concat(const char* szstr) {
this->concat(my_string(szstr));
return *this;
}

my_string my_string::sub_str(size_t start, size_t len) {
if (start > size()-1)
return my_string();
if (len >= (size() - start))
len
= size() - start;
my_string tmp;
tmp.m_str
=
value_type(m_str.begin()
+start,m_str.begin()+start + len);
return tmp;
}

my_string
& my_string::operator +=(const my_string &rhs) {
my_string::value_type::const_iterator ite
= rhs.m_str.begin();
for (; ite != rhs.m_str.end(); ++ ite)
m_str.push_back(
*ite);
return *this;
}

my_string
& my_string::operator +=(const char *rhs) {
size_t szlen
= strlen(rhs);
for (size_t i = 0; i < szlen; ++ i)
m_str.push_back(rhs[i]);
return *this;
}

my_string my_string::
operator + (const my_string &rhs) {
my_string tmp;
tmp
+= (*this);
tmp
+= (rhs);
return tmp;
}

my_string my_string::
operator + (const char* rhs) {
my_string tmp;
tmp
+= (*this);
tmp
+= (rhs);
return tmp;
}

my_string
& my_string::operator = (const my_string &rhs) {
m_str
= rhs.m_str;
return *this;
}

my_string
& my_string::operator = (const char* rhs) {
this->clear();
(
*this) += rhs;
return *this;
}

char& my_string::operator [](size_t index) {
return m_str.at(index);
}

const char& my_string::operator [] (size_t index) const {
return m_str.at(index);
}

// 友元
ostream& operator << (ostream& out, const my_string& str) {
if (str.is_empty())
return out;
my_string::value_type::const_iterator ite
= str.m_str.begin();
for (; ite != str.m_str.end(); ++ ite)
cout
<< *ite ;
return out;
}

my_string::
~my_string(void)
{
}

 

相关阅读 更多 +
排行榜 更多 +
宝宝情商养成宝宝巴士

宝宝情商养成宝宝巴士

休闲益智 下载
燥热手机版

燥热手机版

飞行射击 下载
巨人狙击手安卓版

巨人狙击手安卓版

飞行射击 下载