第三课--之一(对象)实现MyString类的作业
来源:互联网 发布:三国志11兵种数据 编辑:程序博客网 时间:2024/05/15 06:01
#define _CRT_SECURE_NO_WARNINGS#include <cstring>#include <iostream>#include <future>#define MAX_BYTE 32typedef unsigned int UINT;class MyString{public: MyString() { _len = 1; _index = 0; _str = nullptr; } MyString(const char *str) { _index = _len = strlen(str); _str = new char[_len + sizeof(char)]; strcpy(_str, str); } ~MyString() { if (_str) delete _str; } // 设置字符串 void SetString(const char *str) { size_t len = strlen(str); if (len > _len) { SetArray(len); } strcpy(_str, str); _index = len + 1; } // 获取字符串 const char *GetString() const { return _str; } char GetCharByIndex(UINT index) { char cRet = 0; if (index < _index) cRet = _str[index]; return cRet; } // 获取字符串长度 size_t GetLenghtOfString() { return _index; } // 获取数组长度 size_t GetLengthofArray() { return _len; } // 修改其中指定的字符为另一个字符 UINT SetChars(const char cSrc, const char cDst) { UINT iRet = 0; for (UINT i=0; i<_index; ++i) { if (cSrc == _str[i]) { _str[i] = cDst; ++iRet; } } return iRet; } // 查找替换当中所有的字符串 UINT ReplaceWords(const char *strSrc, const char *strDst) { UINT iRet = GetSubStrNumber(strSrc), tmpIndex = _len; char *strTmp = new char[_len]; memcpy(strTmp, _str, _len); size_t srcLen = strlen(strSrc), dstLen = strlen(strDst); do { if (0 == iRet) break; if (dstLen > srcLen) { if (iRet*(dstLen-srcLen)+_index > _len) { SetArray(iRet*(dstLen - srcLen) + _index); } } for (UINT i = 0; i<tmpIndex; ) { if (0 == strncmp(strTmp+i, strSrc, srcLen)) { for (UINT j=0; j<dstLen; ++j) { _str[_index++] = strDst[j]; } i += srcLen; } else { _str[_index++] = strTmp[i++]; } } } while (false); return iRet; } // 向字符串的末尾添加一个字符 void Append(const char c) { if (_index + sizeof(char) > _len) { char *tmpStr = new char[_len]; UINT tmpIndex = _index; memcpy(tmpStr, _str, _len); SetArray(_index + sizeof(char)); memcpy(_str, tmpStr, _len); _index = tmpIndex; } _str[_index++] = c; } // 在末尾添加一个字符串 void Append(const char *str) { if (nullptr != str) { size_t len = strlen(str); for (UINT i=0; i<len; ++i) { Append(str[i]); } } } // 向字符串的末尾添加一个整数 void Append(int iVal) { char temp[MAX_BYTE] = { 0 }; sprintf(temp, "%d", iVal); Append(temp); } // 向字符串中添加浮点数 void Append(const double dVal) { char temp[MAX_BYTE] = { 0 }; sprintf(temp, "%lf", dVal); Append(temp); } // 向字符串添加MyString对象 void Append(const MyString &myStr) { Append(myStr.GetString()); }private: // 设置数组,调整数字的大小,并分配空间 void SetArray(size_t len) { while (_len < len) { _len *= 2; } if (_str) delete[]_str; _index = 0; _str = new char[_len]; memset(_str, 0, _len); } // 获取子字符串的个数 UINT GetSubStrNumber(const char *subStr) { UINT iRet = 0; size_t subStrSize = strlen(subStr); char *tmp = _str; while (true) { tmp = strstr(tmp, subStr); if (nullptr != tmp) { ++iRet; } if (tmp-_str+subStrSize < _len) { tmp += subStrSize; } else { break; } } return iRet; }private: char *_str; // 字符串指针 UINT _index; // 当前字符串的索引,_index位置可以直接加字符的 size_t _len; // 数组的长度};int main(){ MyString str("abcdjjkdhfjk abc jk nfkjh slhghjfuiabciuvh"); UINT ret = str.ReplaceWords("abc", "slhghjfuiabciuvhslhghjfuiabciuvh"); std::cout << str.GetString() << std::endl; str.Append('a'); std::cout << str.GetString() << std::endl; str.Append("456"); std::cout << str.GetString() << std::endl; str.Append(123); std::cout << str.GetString() << std::endl; str.Append(654.123456789); std::cout << str.GetString() << std::endl; MyString strAppend; strAppend.SetString("Hello World!"); std::cout << strAppend.GetString() << std::endl; str.Append(strAppend); std::cout << str.GetString() << std::endl; return 0;}
欢迎大家批评指正
1 0
- 第三课--之一(对象)实现MyString类的作业
- MyString类的实现
- mystring类的实现
- string类的实现(mystring)
- 实现MyString类(三)—关于返回对象的说明
- 实现MyString类(二)—MyString.cpp实现
- 实现MyString类(一)—类声明mystring.h
- 程设作业:MyString类
- 自定义字符串类MyString的C++实现
- C++ MyString类的简单实现
- MyString的实现
- 第三课--之二--类和对象作业--实现一个int型的Array类
- MyString类实现
- 面向对象程序设计第二次实验课——mystring类实现
- C++找对象的季节(补)——MyString
- 实现自己的mystring.h
- C++第三课--之一(对象)
- 【15】实现一个MyString类
- make&makefile——(1)
- 318. Maximum Product of Word Lengths 难度:easy
- Same Tree
- 在Struts2框架中获取Servlet api的三种方式
- 跟着斯坦福白胡子老头学Alert
- 第三课--之一(对象)实现MyString类的作业
- Caffe学习笔记
- html5手机端触屏事件(touch事件)第一章
- ORA-38709: Recovery Area is not enabled.
- javascript:navigator对象
- c++中静态成员变量要在类外部再定义,否则产生link2001错误
- java学习之路之java基本语法之变量
- Android 屏幕的适配方法
- java io流 持续更新