1.串的数据元素只能是字符类型;
2.以子串为操作单位;
SqString.h
#pragma once
#ifndef _SQSTRING_H
#define _SQSTRING_H
class SqString
{
public:
SqString(int size, char *str);
~SqString();
int StrLen()const;
bool SubStr(int pos, int len, char *str)const;
bool StrInsert(int pos, char *str);
void StrDelete(int pos, int len);
void StrConcat(char *str);
int StrCmp(char *str)const;
void StrTraverse();
private:
char *m_pStr;
int m_iLen;
int m_iCapicity;
};
#endif
.cpp
#include "SqString.h"
#include <iostream>
using namespace std;
SqString::SqString(int size, char *str)
{
m_iCapicity = size;
m_pStr = new char[size];
char *ch = m_pStr;
while (*str != '\0') { *ch = *str; ch++; m_iLen++; str++; }
for (int i = m_iLen; i < m_iCapicity; i++) m_pStr[i] = ' ';
}
SqString::~SqString()
{
delete[]m_pStr;
m_pStr = NULL;
}
int SqString::StrLen()const
{
return m_iLen;
}
bool SqString::SubStr(int pos, int len, char *str)const
{
if (pos < 0 || pos + len >= m_iLen || pos >= m_iLen) return false;
for (int i = 0; i < len; ++i)
{
str[i] = m_pStr[pos + i];
}
return true;
}
bool SqString::StrInsert(int pos, char *str)
{
int len = 0; char *ch = str;
while (*ch != '\0') { len++; ch++; }
if (pos < 0 || pos + len - 1 >= m_iLen) return false;
for (int i = m_iLen - 1; i >= pos; i--)
{
m_pStr[i + len] = m_pStr[i];
}
for (int i = 0; i < len; i++)
{
m_pStr[pos] = str[i];
pos++;
}
m_iLen += len;
return true;//不考虑其他情况
}
void SqString::StrDelete(int pos, int len)
{
if (pos < 0 || pos >= m_iLen)
cout << "Error:StrDelete" << endl;
for (int i = 0; i < len; i++)
{
m_pStr[pos + i] = m_pStr[pos + len + i];
pos++;
}
m_iLen -= len;
}
void SqString::StrConcat(char *str)
{
int len = 0; char *ch = str;
while (*ch != '\0') { len++; ch++; }
if (m_iCapicity != m_iLen)
{
while (m_iLen != m_iCapicity)
{
for (int i = 0; i < len; i++)
{
m_pStr[m_iLen] = str[i];
m_iLen++;
}
}
}
else
{
cout << "No rest space!" << endl;
}
}
int SqString::StrCmp(char *str)const
{
int len = 0; char *ch = str;
while (*ch != '\0') { len++; ch++; }
for (int i = 0; i < len; ++i)
{
if (str[i] != m_pStr[i])
return m_pStr[i] - str[i];
}
return 0;
}
void SqString::StrTraverse()
{
cout << m_pStr << endl;
}
main
#include <iostream>
#include "SqString.h"
using namespace std;
int main(void)
{
char ch1[] = "Hello world";
char ch2[] = "my ";
SqString *p = new SqString(30, ch1);
p->StrTraverse();
p->StrInsert(6, ch2);
p->StrTraverse();
delete p;
p = NULL;//Look Out!
system("pause");
return 0;
}