第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)
{
}
相关阅读 更多 +
排行榜 更多 +