#include #include class CTString { private: char *m_pData; // 用于保存字符数据 int m_nLen; // 记录字符长度 public: // 构造函数和析构函数 CTString(); CTString(const char *); CTString(const CTString&); ~CTString(); // 其它成员函数 CTString* Copy(CTString*); CTString* Connect(CTString*); int Find(CTString*); int Find(char) const; void Print() const; // 获取字符数据的公有函数 const char* GetData() const { return m_pData; } // 查找子串 int FindSubstring(CTString*); }; // 构造函数 CTString::CTString() { m_nLen = 0; m_pData = new char[1]; *m_pData = '\0'; } CTString::CTString(const char *pData) { m_nLen = strlen(pData); m_pData = new char[m_nLen + 1]; strcpy(m_pData, pData); } // 拷贝构造函数 CTString::CTString(const CTString& str) { m_nLen = str.m_nLen; m_pData = new char[m_nLen + 1]; strcpy(m_pData, str.m_pData); } // 析构函数 CTString::~CTString() { delete [] m_pData; } // 拷贝函数 CTString* CTString::Copy(CTString *str) { *str = *this; return str; } // 连接函数 CTString* CTString::Connect(CTString *str) { CTString *temp = new CTString; temp->m_nLen = m_nLen + str->m_nLen; temp->m_pData = new char[temp->m_nLen + 2]; // 加上一个空格的长度 strcpy(temp->m_pData, m_pData); strcat(temp->m_pData, " "); // 添加一个空格 strcat(temp->m_pData, str->m_pData); return temp; } // 查找子串 int CTString::FindSubstring(CTString *str) { char *ptr = strstr(m_pData, str->m_pData); if (ptr) { // 计算子串在主串中的位置,考虑到额外的空格 int pos = ptr - m_pData; return pos - 1; // 减去额外的空格 } else { return -1; // 未找到 } } // 查找字符 int CTString::Find(char ch) const { char *ptr = strchr(m_pData, ch); if (ptr) { // 计算字符在字符串中的位置,考虑到额外的空格 int pos = ptr - m_pData; return pos - 1; // 减去额外的空格 } else { return -1; // 未找到 } } // 打印输出字符串内容 void CTString::Print() const { std::cout << "字符串内容:" << m_pData << std::endl; } int main() { char strInput1[100], strInput2[100], charToFind; std::cout << "请输入第一个字符串: "; std::cin.getline(strInput1, 100); std::cout << "请输入第二个字符串: "; std::cin.getline(strInput2, 100); std::cout << "请输入要查找的字符: "; std::cin >> charToFind; CTString str1(strInput1); CTString str2(strInput2); CTString str3(str1); CTString *str4 = new CTString; str3.Copy(str4); CTString *str5 = str4->Connect(&str2); str1.Print(); str3.Print(); str5->Print(); const char *data = str5->GetData(); int subStrPos = str5->FindSubstring(&str2); if (subStrPos >= 0) std::cout << "子串位置: " << subStrPos << std::endl; int charPos = str5->Find(charToFind); if (charPos >= 0) std::cout << "字符位置: " << charPos << std::endl; delete str4; delete str5; return 0; }