informasi kontak saya
Surat[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
🌈个人主页:Teman sekelas Yuchen
💫个人格言:“成为自己未来的主人~”
Berikut ini adalah fungsi String yang akan kami implementasikan pada artikel ini:
- #pragma once
- #include<iostream>
- #include<assert.h>
- using namespace std;
-
- namespace bit
- {
- class string
- {
- public:
- typedef char* iterator;
- iterator begin();
- iterator end();
-
- string(const char* str = "");
- ~string();
- const char* c_str() const;
- size_t size() const;
- char& operator[](size_t pos);
- private:
- char* _str;
- size_t size;
- size_t _capacity;
- };
- }
Di antara fungsi-fungsi tersebut
string(const char* str = "");
Tujuan penulisan cara ini terutama untuk memperhitungkan string kosong dan menambahkan nilai default. Jika string yang masuk kosong, maka akan otomatis disalin ke "0".
- const char* c_str() const;
- size_t size() const;
Dalam dua baris kode ini, tujuan utama penambahan const adalah untuk memastikan bahwa kedua fungsi ini dapat dipanggil terlepas dari apakah string ukuran yang diteruskan dapat dimodifikasi.
Kami meletakkan kode di atas di file header.
Dalam file .cpp, kami menggunakannya untuk mengimplementasikan fungsi-fungsi ini.
#include"String.h"
Kami memperkenalkan file header di awal file .cpp. Beberapa siswa mungkin penasaran apakah itu akan bertentangan dengan file String.h di perpustakaan C++, tetapi hasilnya bukan karena kompiler akan mencari di direktori saat ini, dan saat ini File sudah ada di direktori.
- #define _CRT_SECURE_NO_WARNINGS
- #include"String.h"
- namespace bit
- {
- string::iterator string::begin()
- {
- return _str;
- }
- string::iterator string::end()
- {
- return _str + _size;
- }
-
- string::string(const char* str)
- :_size(strlen(str))
- {
- _str = new char[_size + 1];
- _capacity = _size;
- strcpy(_str, str);
- }
- string::~string()
- {
- delete[] _str;
- _str = nullptr;
- _size = _capacity = 0;
- }
- const char* string::c_str() const
- {
- return _str;
- }
- size_t string::size() const
- {
- return _size;
- }
- char& string::operator[](size_t pos)
- {
- assert(pos < _size);
- return _str[pos];
- }
-
- }
Ini adalah implementasi kode String dasar.
Berikut ini adalah file pengujian untuk String ini
- #define _CRT_SECURE_NO_WARNINGS
- #include<iostream>
- #include"String.h"
- namespace bit
- {
- void test_string1()
- {
- bit::string s1("hello world");
- cout << s1.c_str() << endl;
- for (size_t i = 0; i < s1.size(); i++)
- {
- s1[i]++;
- }
- for (size_t i = 0; i < s1.size(); i++)
- {
- cout << s1[i] << " ";
- }
- cout << endl;
- string::iterator it1 = s1.begin();
- while (it1 != s1.end())
- {
- cout << *it1 << " ";
- ++it1;
- }
- cout << endl;
- for (auto e : s1)
- {
- cout << e << " ";
- }
- cout << endl;
- bit::string s2;
- cout << s2.c_str() << endl;
- }
- }
- int main()
- {
- bit::test_string1();
-
- return 0;
- }
Faktanya, untuk rentang, lapisan bawahnya adalah iterator, dan iterator pada dasarnya adalah sebuah paket. Berbagai tipe di bagian bawah diganti namanya dengan iterator untuk membangun superstruktur terpadu.
Oleh karena itu, selama iterator dasar dibuat, range for dapat digunakan.