моя контактная информация
Почтамезофия@protonmail.com
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
🌈个人主页:Одноклассник Ючен
💫个人格言:“成为自己未来的主人~”
Ниже приведены функции String, которые мы реализуем в этой статье:
- #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;
- };
- }
Среди этих функций
string(const char* str = "");
Целью такого написания является, главным образом, учет пустых строк и добавление значения по умолчанию. Если входящая строка пуста, она автоматически копируется в «0».
- const char* c_str() const;
- size_t size() const;
В этих двух строках кода основная цель добавления const — гарантировать возможность вызова этих двух функций независимо от того, можно ли изменить переданную строку размера.
Мы помещаем приведенные выше коды в заголовочный файл.
В файле .cpp мы используем его для реализации этих функций.
#include"String.h"
Мы представляем заголовочный файл в начале файла .cpp. Некоторым студентам может быть любопытно, будет ли он конфликтовать с файлом String.h в библиотеке C++, но результат не таков, потому что компилятор будет искать в текущем каталоге, а не в текущем каталоге. текущий Файл уже существует в каталоге.
- #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];
- }
-
- }
Это базовая реализация строкового кода.
Ниже приведен тестовый файл для этой строки.
- #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;
- }
Фактически, для диапазона for его нижний уровень представляет собой итератор, а итератор в основном представляет собой пакет. Различные типы внизу переименовываются в итератор для создания единой надстройки.
Следовательно, пока базовый итератор создан, можно использовать диапазон for.