τα στοιχεία επικοινωνίας μου
Ταχυδρομείο[email protected]
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;
- }
Στην πραγματικότητα, για το εύρος για, το κάτω στρώμα του είναι ένας επαναλήπτης και ο επαναλήπτης είναι κυρίως ένα πακέτο.
Επομένως, εφόσον έχει δημιουργηθεί ο βασικός επαναλήπτης, μπορεί να χρησιμοποιηθεί το range for.