내 연락처 정보
우편메소피아@프로톤메일.com
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
🌈个人主页:동급생 Yuchen
💫个人格言:“成为自己未来的主人~”
이번 글에서 구현할 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 파일의 시작 부분에 헤더 파일을 소개합니다. 일부 학생들은 C++ 라이브러리의 String.h 파일과 충돌할지 궁금해할 수 있지만 결과는 컴파일러가 현재 디렉터리에서 검색하기 때문에 발생하지 않습니다. 현재 파일이 이미 디렉터리에 있습니다.
- #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;
- }
실제로 범위의 경우 맨 아래 레이어는 반복자이고 반복자는 주로 패키지입니다. 맨 아래의 다양한 유형은 통합된 상위 구조를 구축하기 위해 반복자로 이름이 변경됩니다.
따라서 기본 반복자가 구축되어 있으면 range for를 사용할 수 있습니다.