21xrx.com
2024-11-08 23:22:42 Friday
登录
文章检索 我的文章 写文章
C++字符串类源代码
2023-07-06 02:40:14 深夜i     --     --
C++ 字符串类 源代码

C++字符串类是一种常用的数据类型,用于存储和操作文本字符串。字符串类源代码提供了一组方法和函数,可以方便地处理各种字符串操作,如拼接、搜索、删除、替换、比较等。以下是一些常见的C++字符串类源代码示例:

1. 字符串类的定义和初始化


class MyString {

public:

  // 构造函数

  MyString() : m_data(nullptr), m_length(0) {}

  MyString(const char* str) {

    if (str) {

      m_length = strlen(str);

      m_data = new char[m_length + 1];

      strcpy(m_data, str);

    }

  }

  // 拷贝构造函数

  MyString(const MyString& other) {

    if (other.m_data) {

      m_length = other.m_length;

      m_data = new char[m_length + 1];

      strcpy(m_data, other.m_data);

    }

  }

  // 析构函数

  ~MyString() {

    if (m_data) {

      delete[] m_data;

      m_data = nullptr;

    }

  }

  // 获取字符串长度

  int length() const { return m_length; }

  // 获取字符串数据

  const char* c_str() const { return m_data; }

private:

  char* m_data;  // 字符串数据

  int m_length;  // 字符串长度

};

2. 字符串拼接


MyString operator+ (const MyString& lhs, const MyString& rhs) {

  MyString result;

  result.m_length = lhs.m_length + rhs.m_length;

  result.m_data = new char[result.m_length + 1];

  strcpy(result.m_data, lhs.m_data);

  strcat(result.m_data, rhs.m_data);

  return result;

}

3. 字符串搜索


int MyString::find(const char* str) const {

  char* p = strstr(m_data, str);

  if (p) {

    return p - m_data;

  }

  return -1;  // 没有找到

}

4. 字符串删除


void MyString::erase(int pos, int count) {

  if (pos >= 0 && pos < m_length && count > 0) {

    count = min(count, m_length - pos);

    memmove(m_data + pos, m_data + pos + count, m_length - pos - count + 1);

    m_length -= count;

  }

}

5. 字符串替换


void MyString::replace(int pos, int count, const char* str) {

  count = min(count, m_length - pos);

  int new_length = m_length - count + strlen(str);

  char* new_data = new char[new_length + 1];

  memcpy(new_data, m_data, pos);

  memcpy(new_data + pos, str, strlen(str));

  memcpy(new_data + pos + strlen(str), m_data + pos + count, m_length - pos - count + 1);

  delete[] m_data;

  m_data = new_data;

  m_length = new_length;

}

6. 字符串比较


bool operator== (const MyString& lhs, const MyString& rhs) {

  if (lhs.length() != rhs.length()) {

    return false;

  }

  return strcmp(lhs.c_str(), rhs.c_str()) == 0;

}

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复