数据结构探险—串

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

这里写图片描述

猜你喜欢

转载自blog.csdn.net/danieldingshengli/article/details/81125847
今日推荐