行业知识
09 string的实现
2026-11-14 03:13:00
来源:互联网转载
注意
实���仿cplus官网的的string类,对部分主要功能实现
()实现
头文件
#pragma once#include #include #include namespace mystring{class string{friend std::ostream& operatorreturn _str;}iterator end(){return _str + _size;}cosnt_iterator begin() const{return _str;}cosnt_iterator end() const{return _str + _size;}//初始化string(const char* str = "");string(const string& obj);string& operator=(const string& obj);//增void PsuhBack(char ch);string& Append(const char* str);string& Insert(size_t pos, char ch);string& Insert(size_t pos, const char* str);string& operator+=(char ch);string& operator+=(const char* str);void Reserve(size_t capacity);void Resize(size_t capacity, char ch = '');//删string& Erase(size_t pos, size_t n = npos);void Clear();//查size_t Find(char ch, size_t pos = 0);size_t Find(char* str, size_t pos = 0);const char* c_str() const{return _str;}size_t size() const{return _size;}size_t capacity() const{return _capacity;}//改char& operator[](size_t pos){assert(pos s || s == *this;}bool operatorreturn *this = _capacity){//扩容Reserve(_capacity + len);}strcpy(_str + _size, str);_size += len;return *this;}string& mystring::string::Insert(size_t pos, char ch){assert(pos = _capacity){//扩容Reserve(_capacity * 2);}int end = _size + 1;while (end > pos){_str[end] = _str[end - 1];end--;}_str[pos] = ch;_size++;return *this;}string& mystring::string::Insert(size_t pos, const char* str){assert(pos = _capacity){//扩容Reserve(_capacity + len);}size_t end = _size + len;while (end - len + 1> pos){_str[end] = _str[end - len];end--;}strncpy(_str + pos, str, len);_size += len;return *this;}string& mystring::string::operator+=(char ch){PsuhBack(ch);return *this;}string& mystring::string::operator+=(const char* str){Append(str);return *this;}void mystring::string::Reserve(size_t capacity){//比原空间小,不扩容,防止单独调用if (capacity > _capacity){char* tmp = new char[capacity];strcpy(tmp, _str);delete[] _str;_str = tmp;_capacity = capacity;}}void mystring::string::Resize(size_t capacity, char ch){//比元空间小,不缩容if (capacity > _capacity){Reserve(capacity + 1);memset(_str + _size, ch, capacity - _size);_size = capacity;_str[_size] = '';}else{_str[capacity] = '';_size = capacity;}}string& mystring::string::Erase(size_t pos, size_t n){assert(pos = _size){_str[pos] = '';//长度改为pos_size = pos;}else{/*while (end s1;//std::cin >> s2;//string s2("world");//s2 = s1;//printf("size = %d\n capacity = %d\n%s\n", s1.size(), s1.capacity(), s1.c_str());//printf("s1 = s2 %d", s1 >= s2);//printstring(s1);std::cout
上一篇:共享无法联络服务器怎么办?