网站建设软件设施绝对正品的购物app
- 作者: 五速梦信息网
- 时间: 2026年03月21日 07:44
当前位置: 首页 > news >正文
网站建设软件设施,绝对正品的购物app,国内免费无版权图片素材网站,做任务提现的网站大家看了这么久的string了#xff0c;可能对string的简单实现有兴趣#xff0c;所以我实现了一个string类的常用接口#xff0c;大家可以自行查看#xff1a; 我是分多文件写的#xff1a; string.h: #pragma once #define _CRT_SECURE_NO_WARNINGS 1 #include ios…大家看了这么久的string了可能对string的简单实现有兴趣所以我实现了一个string类的常用接口大家可以自行查看 我是分多文件写的 string.h: #pragma once #define _CRT_SECURE_NO_WARNINGS 1 #include iostream using namespace std; #include string.h #include assert.hnamespace cx {class string{public://构造函数string(const char* str );//默认值声明时写–string()string(const string s); string(size_t n, char c);string(const char* s, size_t n);string(const string str, size_t pos, size_t len npos);//运算符重载构造string operator (const char* s); string operator (char c); //string operator(const string s);string operator(const string s);//析构函数~string();//迭代器部分typedef char* iterator;typedef const char* const_iterator;iterator begin(){return _str;}const_iterator begin() const{return _str;}iterator end(){return _str_size;}const_iterator end() const{return _str _size;}iterator rbegin(){return end();}const_iterator rbegin() const{return end();}iterator rend(){return begin();}const_iterator rend() const{return begin();}//capacity:inline size_t size()const{return _size;}inline size_t length()const{return _size;}inline size_t capacity()const{return _capacity;}inline bool empty()const{return _size 0;}void reserve(size_t n 0);inline size_t max_size() const{return -1;}void clear(); //modify:string operator (const string str);string operator (const char* s);string operator (char c);void push_back(char c);string append(const string str);string append(const string str, size_t subpos, size_t sublen);string append(const char* s);string append(const char* s, size_t n);string append(size_t n, char c);string erase(size_t pos 0, size_t len npos);void swap(string str);void pop_back();string replace(size_t pos, size_t len, const string str);string replace(size_t pos, size_t len, const char* s);// const char* c_str()const;//access:char operator;const char operator const;char at(size_t pos);const char at(size_t pos) const;//String operations :size_t find(const string str, size_t pos 0) const;size_t find(const char* s, size_t pos 0) const;size_t find(const char* s, size_t pos, size_t n) const;size_t find(char c, size_t pos 0) const;string substr(size_t pos 0, size_t len npos) const;//Non - member function overloads:bool operator(const string s);bool operator(const string s);bool operator(const string s);bool operator(const string s);bool operator(const string s);bool operator!(const string s);//友元部分friend ostream operator(ostream _cout, const cx::string s); friend istream operator(istream _cin, cx::string s);private:const static size_t npos-1;//特殊用法//static size_t npos;char* _strnullptr;//缺省值size_t _size0;//缺省值size_t _capacity0;//缺省值}; }; //static正常用法 //size_t npos -1; string.cpp: #include string.h //构造函数 cx::string::string(const char* str)//默认值处理空串 {//不适合列表初始化原因在于strlen时间复杂度O(N)_size strlen(str);_capacity _size;char* tmp new char[_size 1];//new不用检查strcpy(tmp, str);tmp[_size] \0;delete[] _str;_str tmp; } //传统写法 //cx::string::string(const string s) //{ // char* tmp new char[s.size() 1]; // strcpy(tmp, s._str); // tmp[s.size()] \0; // delete[] _str; // _str tmp; // _capacity s._capacity; // _size s._size; //} //现代写法; cx::string::string(const string s) {cx::string tmp(s._str);//拷贝一份临时变量swap(tmp);//将this和tmp交换//注意点this初始化情况我们在private处给缺省值 } cx::string::string(size_t n, char c) {char tmp new char[n 1];//strcpy(_str, 0);_size n;_capacity n;for (int i 0; i n; i){tmp[i] c;}tmp[_size] \0;delete[] _str;_str tmp; } cx::string::string(const char* s, size_t n) {char* tmp new char[n 1];strncpy(tmp, s, n);tmp[n] \0;delete[] _str;_str tmp;_size _capacity n; } cx::string::string(const string str, size_t pos, size_t len) {if (len npos || pos len str._size){char* tmp new char[str.size() - pos 1];_capacity str.size() - pos;strncpy(tmp, str._str pos, len);delete[] _str;_str tmp;}else{char* tmp new char[len 1];_capacity len;strncpy(tmp, str._str pos, len);delete[] _str;_str tmp;}_size len;_str[_size] \0; } //运算符重载构造 cx::string cx::string::operator (const char* s) {_capacity _size strlen(s);char* tmp new char[_size 1];strcpy(tmp, s);tmp[_size] \0;delete[] _str;_str tmp;return this; } cx::string cx::string::operator (char c) {char tmp new char[2];tmp[0] c;_size _capacity 1;tmp[_size] \0;delete[] _str;_str tmp;return this; } //传统写法 //cx::string cx::string::operator(const string s) //{ // if (this ! s) // { // char tmp new char[s._capacity 1]; // strcpy(tmp, s._str); // tmp[s._capacity] \0; // delete[] _str; // _str tmp; // _size s._size; // _capacity s._capacity; // } // return *this; //} //现代写法 cx::string cx::string::operator(string s) {swap(s);//将this和s交换return this; } //析构函数 cx::string::~string() {delete[] _str;_str nullptr;_size _capacity 0; }//capacity: void cx::string::reserve(size_t n) {if (n _capacity){char tmp new char[n 1];strcpy(tmp, _str); delete[] _str;_str tmp;_capacity n;} } void cx::string::clear() {erase(); } void cx::string::swap(string str) {std::swap(_str, str._str);std::swap(_size,str._size);std::swap(_capacity , str._capacity); } void cx::string::pop_back() {erase(_size - 1, 1); } cx::string cx::string::replace(size_t pos, size_t len, const string str) {//检查if (pos len _size){reserve(pos len);strncpy(_str pos, str._str, len);_size pos len;_str[_size] \0;}else{strncpy(_str pos, str._str, len);_size pos len;}return this; } cx::string cx::string::replace(size_t pos, size_t len, const char s) {//检查if (pos len _size){reserve(pos len);strncpy(_str pos, s, len);_size pos len;_str[_size] \0;}else{strncpy(_str pos, s, len);_size pos len;}return *this; }//modify: cx::string cx::string::operator (const cx::string str) {append(str);return this; } cx::string cx::string::operator (const char s) {append(s);return *this; } cx::string cx::string::operator (char c) {push_back©;return *this; } void cx::string::push_back(char c) {if (_capacity _size){size_t newcapacity _capacity 0 ? 4 : 2 * _capacity;reserve(newcapacity);}_str[_size] c;_str[_size] \0; } cx::string cx::string::append(const string str) {if (str._size _size _capacity){reserve(str._size _size);}strcpy(_str _size, str._str);_size str._size;_str[_size] \0;return this; } cx::string cx::string::append(const char s) {size_t len strlen(s);if (len _size _capacity){reserve(_size len);}strcpy(_str _size, s);_size len;_str[_size] \0;return *this; } cx::string cx::string::append(size_t n, char c) {//检查if (n _size _capacity){reserve(n _size);}for (size_t i _size; i _size n; i){_str[i] c;}_size n;_str[_size] \0;return this; } cx::string cx::string::append(const char s, size_t n) {//检查if (n _size _capacity){reserve(n _size);}strncpy(_str_size, s, n);_size n;_str[_size] \0;return *this; } cx::string cx::string::append(const string str, size_t subpos, size_t sublen) {//检查if (sublen _size _capacity){reserve(sublen _size);}strncpy(_str_size, str._strsubpos, sublen);_size sublen;_str[_size] \0;return *this; } cx::string cx::string::erase(size_t pos, size_t len) { assert(pos _size);if (len npos || len pos _size){_str[pos] \0;_size pos;}else{strcpy(_str pos, _str pos len);_size - len;_str[_size] \0;}return *this; }//access: char cx::string::operator {assert(pos _size);return *(_str pos);//等价于_str[pos] } const char cx::string::operator const {assert(pos _size);return (_str pos);//等价于_str[pos] } char cx::string::at(size_t pos) {assert(pos _size);return _str[pos]; } const char cx::string::at(size_t pos) const {assert(pos _size);return _str[pos]; }//String operations : size_t cx::string::find(const string str, size_t pos ) const {char tmp new char[str._size 1];strcpy(tmp, str._str);tmp[str._size ] \0;const char* ptr strstr(_str pos, tmp);if (ptr nullptr){delete[] tmp;tmp nullptr;return npos;}else{delete[] tmp;tmp nullptr;return ptr - _str;} } size_t cx::string::find(const char* s, size_t pos ) const {const char* ptr strstr(_str pos, s);if (ptr nullptr){return npos;}else{return ptr - _str;} } size_t cx::string::find(const char* s, size_t pos, size_t n) const {char* tmp new char[n];strcpy(tmp, s);tmp[n] \0;const char* ptr strstr(_str pos, tmp);if (ptr nullptr){delete[] tmp;tmp nullptr;return npos;}else{delete[] tmp;tmp nullptr;return ptr - _str;} } size_t cx::string::find(char c, size_t pos ) const {for (size_t i pos; i _size; i){if (_str[i] c)return i;}return npos; } cx::string cx::string::substr(size_t pos , size_t len) const {//检查assert(pos _size);size_t end pos len;if (len npos || pos len _size){end _size;}string str;str.reserve(end - pos);for (size_t i pos; i end; i){str _str[i];}return str; }//Non - member function overloads: bool cx::string::operator(const string s) {size_t n _size s._size ? s._size : _size;for (size_t i 0; i n; i){if (_str[i] s._str[i])return false;}if (n s._size)return false;elsereturn true; } bool cx::string::operator(const string s) {return !(*this s); } bool cx::string::operator(const string s) {return !((*this s) || (*this s)); } bool cx::string::operator(const string s) {return !(*this s); } bool cx::string::operator(const string s) {if (_size ! s._size)return false;for (size_t i 0; i _size; i){if (_str[i] ! s._str[i])return false;}return true; } bool cx::string::operator!(const string s) {return !(*this s); }//友元 // 写法一 //namespace cx //{ // ostream operator(ostream _cout, const cx::string s) // { // for (auto e : s) // { // _cout e; // } // return _cout; // } //} //写法二 ostream cx::operator(ostream _cout, const cx::string s) {for (auto e : s){_cout e;}return _cout; } istream cx::operator(istream _cin, cx::string s) {s.clear();//清除内容char ch _cin.get();//建立一个缓冲数组char buff[64];size_t i 0;while((ch ! ) (ch ! \n)){//读入buff中buff[i] ch;if (65 i){buff[i] \0;//注意置零s buff;//利用operator数组i 0;}ch _cin.get();}if (i 0){buff[i] \0;s buff;}return _cin; } test.cpp: #include string.h void test_string() {cx::string s0(Initial string);std::cout s0 std::endl;cx::string s1;std::cout s1 std::endl;cx::string s2(s0);std::cout s2 std::endl;cx::string s3(s0, 8, 3);std::cout s3 std::endl;cx::string s4(A character sequence);std::cout s4 std::endl;cx::string s5(Another character sequence, 12);std::cout s5 std::endl;cx::string s6(10, x);std::cout s6 std::endl;cx::string s7(10, 42);std::cout s7 std::endl; } void test_operator() {cx::string str(Test string);for (int i 0; i str.size(); i){std::cout str[i] std::endl;}for (int i 0; i str.length(); i){std::cout str[i] std::endl;} } void test_capacity() {cx::string str(Test string);std::cout str.max_size() std::endl;std::cout str.capacity() std::endl; } void test_reserve() {cx::string str(Test string);std::cout str.empty() std::endl;std::cout str.capacity() std::endl;str.reserve(50);std::cout str.capacity() std::endl; } void _string2() {cx::string s0(Initial string);cout s0 std::endl;cx::string s1;cout s1 std::endl;cx::string s2(s0);cout s2 std::endl;cx::string s3(s0, 8, 3);cout s3 std::endl;cx::string s4(A character sequence);cout s4 std::endl;cx::string s5(Another character sequence, 12);cout s5 std::endl;cx::string s6(10, x);cout s6 std::endl;cx::string s7(10, 42);cout s7 std::endl; } void test_s() {cx::string s0(Initial string);cx::string s3(s0, 8, 3);cout s3 std::endl; } void test_opertaor() {cx::string s1 hello world;cx::string s2 c;cx::string s3 s1;cout s1 std::endl;cout s2 std::endl;cout s3 std::endl; } void test_o() {cx::string str1, str2, str3;str1 Test string: ; // c-stringstr2 x; // single character//str3 str1 str2; // stringcout str1 std::endl;cout str2 std::endl; } void test_push() {cx::string s1 hello worl;s1.push_back(d);cout s1 std::endl; } void test_append() {cx::string str;cx::string str2 Writing ;cx::string str3 print 10 and then 5 more;str.append(str2);// Writing cout str std::endl;str.append(str3, 6, 3);// 10 cout str std::endl;str.append(dots are cool, 5);// dots cout str std::endl;str.append(here: );// here: cout str std::endl;str.append(10u, .); // ……….cout str std::endl; } void test_oper() {cx::string name(John);cx::string family(Smith);name K. ;cout name std::endl;name family;cout name std::endl;name \n;cout name std::endl; } void erase_test() {cx::string s1 hello world;cout s1.size() std::endl;cout s1.capacity() std::endl;cout s1 endl;s1.clear();cout s1.size() std::endl;cout s1.capacity() std::endl;cout s1 endl; } void test_cin() {cx::string s1, s2;cin s1;cout s1 endl;cin s2;s1 s2;cout s1 endl; } void test_stringc() {cx::string s1 helloworld;cx::string s2(s1);cout s2 endl; } void test_op() {cx::string s1 hello world,s2;s2 s1;cout s2 endl; } int main() {test_stringc();return 0; } 最后感谢大家的支持
- 上一篇: 网站建设软件设计室内设计师优秀简介
- 下一篇: 网站建设氵金手指专业做网站漯河
相关文章
-
网站建设软件设计室内设计师优秀简介
网站建设软件设计室内设计师优秀简介
- 技术栈
- 2026年03月21日
-
网站建设入驻现在有什么新型建筑模板
网站建设入驻现在有什么新型建筑模板
- 技术栈
- 2026年03月21日
-
网站建设入门书网站开发的推荐
网站建设入门书网站开发的推荐
- 技术栈
- 2026年03月21日
-
网站建设氵金手指专业做网站漯河
网站建设氵金手指专业做网站漯河
- 技术栈
- 2026年03月21日
-
网站建设商家公司网店代运营哪个好
网站建设商家公司网店代运营哪个好
- 技术栈
- 2026年03月21日
-
网站建设商品编码是多少做网站付款会有凭证吗
网站建设商品编码是多少做网站付款会有凭证吗
- 技术栈
- 2026年03月21日



