21xrx.com
2025-03-26 22:19:48 Wednesday
文章检索 我的文章 写文章
C++字符串类源代码
2023-07-06 02:40:14 深夜i     10     0
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;
}

  
  

评论区