Προγραμματισμός

* Γνώση Υπολογιστών >> Προγραμματισμός >> C /C + + Προγραμματισμός

Πώς να δημιουργήσετε ένα δυναμικό String στο C + +

είδη Δυναμικά δεδομένα δεν έχουν σταθερό μέγεθος . Όταν ένας υπολογιστής αποθηκεύει έναν αριθμό , χρησιμοποιεί τον ίδιο αριθμό bytes για να αποθηκεύσετε τον αριθμό " 0 " και τον αριθμό " 20000 ". Αλλά προσπαθήστε να αποθηκεύσετε μια πρόταση και τις αλλαγές πανόραμα δραματικά . Δεδομένου ότι κάθε πρόταση έχει ένα διαφορετικό μήκος , η μνήμη χρησιμοποιείται για την αποθήκευση της ποινής πρέπει να αλλάξει δυναμικά . Πρότυπο C δεν περιλαμβάνουν έναν τύπο δεδομένων συμβολοσειράς , και το σχεδιασμό μιας δυναμικής τύπο δεδομένων συμβολοσειράς (ή κατηγορίας string) έχει γίνει σχεδόν μια ιεροτελεστία της μετάβασης για κάθε νέο C /C + + προγραμματιστής . Τα πράγματα που θα χρειαστείτε
Υπολογιστών
C + + Compiler ( συνιστάται : Visual C + + Express )
Η Εμφάνιση Περισσότερες οδηγίες
Σχεδιάστε ένα String Class
Η 1

Κοίτα τα χαρακτηριστικά της κατηγορίας εγχόρδων σας . Σειρά σας πρέπει να έχει την ακόλουθη :

Δυναμική μέγεθος ( αλλάζει με την είσοδο του χρήστη , ή εκχώρηση )

Να είναι σε θέση να γνωρίζουν το μέγεθος των χορδών σας

εξόδου το string . . αποθηκευμένα στη μνήμη.

Αποθηκεύστε το μέγεθος .

Αποθηκεύστε τον πρώτο χαρακτήρα της συμβολοσειράς μας ( δεδομένου ότι είναι δυναμική , δεν ξέρεις πού τελειώνει . ) 2

Ξεχωριστή που διαθέτει της κατηγορίας εγχόρδων σας είναι πληροφορίες ( ή στοιχεία ), και ποιες είναι οι συναρτήσεις. Συνήθως , κάτι που συνεπάγεται δράση είναι μια λειτουργία . Από τη λίστα μας : . .

Δυναμική μέγεθος - > Λειτουργία με βάση πώς να κατασκευάσει μια σειρά

ξέρετε το μέγεθος του string - > Λειτουργία

εξόδου της εγχόρδων - . > Λειτουργία

Αποθηκεύστε το μέγεθος - > δεδομένων /πληροφοριών

Αποθηκεύστε την αρχή του string - . > δεδομένων /πληροφοριών
εικόνων . 3

Ορίστε το ρόλο της κάθε λειτουργίας , καθώς και το είδος των δεδομένων τα μέλη της τάξης σας με απλά λόγια . Από την προηγούμενη λίστα : . .

Δυναμική Μέγεθος - Λειτουργία - Κατασκευάζει το string

ξέρετε το μέγεθος - Λειτουργία - Επιστρέφει μέγεθος της συμβολοσειράς

εξόδου το string - Λειτουργία - Επιστρέφει το περιεχόμενα εγχόρδων

Αποθηκεύστε το μέγεθος - . δεδομένα /πληροφορίες - θα πρέπει να είναι θετικός ακέραιος

Αποθηκεύστε την αρχή του string - . δεδομένα /πληροφορίες - . ένας χαρακτήρας
Η
Εφαρμογή του String Class - Header File
Η 4

Δημιουργήστε ένα αρχείο κεφαλίδας που ονομάζεται mystring.h ( File - > Add - > Header File ) . Ένα αρχείο κεφαλίδα είναι σαν ένα δείκτη για τον κωδικό σας .
5

Ορίστε την τάξη σας στο αρχείο κεφαλίδας . Αυτός είναι ο κώδικας :

τάξη MyString {
Η 6

Δημιουργία δημόσιων λειτουργιών για την αντιμετώπιση όλων των λειτουργιών στο σχεδιασμό σας . Αυτός είναι ο κώδικας :

κοινό:

Συμβολοσειρά ( ) ? //Δημιουργεί ένα κενό string

MyString ( const char * ) ? //Δημιουργεί και προετοιμάζει το string για να κάποια αξία ( στην παρένθεση)

~ συμβολοσειρά ( ) ? //αποδεσμεύει πόρους δυναμική μνήμη

int getSize ( ) ? //μας δείχνει το μέγεθος του string

char * outputmystring ( ) ? //εξάγει το string
Η 7

Δημιουργία ιδιωτικών μέλη δεδομένων για την αποθήκευση των δεδομένων των χορδών σας . Αυτός είναι ο κώδικας :

private: int

_size ? //Αποθηκεύει το μέγεθος της συμβολοσειράς

char * _mystr ? /* Αυτό είναι ένα μέλος δεδομένων που δείχνει στο πρώτο χαρακτήρα του string . Αν γνωρίζουμε τον πρώτο χαρακτήρα και το μέγεθος του string, μπορούμε να έχουμε πρόσβαση όλοι οι χαρακτήρες του * /

}
8

Πληκτρολογήστε την πλήρη κεφαλίδα κωδικό σας αρχείο ( μπορείτε να αντιγράψετε και να επικολλήσετε από εδώ ) :

/* mystring.h * /

τάξη MyString {

κοινό:

Συμβολοσειρά ( ) ?

Συμβολοσειρά ( const char * ) ?

~ Συμβολοσειρά ( ) ?

int getSize ( ) ?

char * outputmystring ( ) ?

private:

int _size ?

char * _mystr ?

}
εικόνων Εφαρμογή του String Class - Κωδικός αρχείου
Η 9

Δημιουργήστε ένα αρχείο που ταιριάζουν CPP ονομάζεται mystring.cpp ( File- > Add - > file cpp - κενό αρχείο ) . Εδώ , θα περιλαμβάνει τους ορισμούς για τη λειτουργία στο αρχείο κεφαλίδας mystring.h . Ακριβώς όπως ένα βιβλίο , header αρχεία αποθηκεύουν τα βασικά tittles , και cpp αρχεία αποθηκεύουν το περιεχόμενο και τους ορισμούς της κάθε κεραία .
Η 10

Συμπεριλάβετε τα CString και iostream βιβλιοθήκες . Αυτός είναι ο κώδικας :

/* mystring.cpp * /

# include

# include
Η 11

Ορίστε τις κατασκευαστικές λειτουργίες (άδειο κατασκευών και κατασκευαστικών παραμέτρων) . Εδώ είναι ο κώδικας :

MyString :: Συμβολοσειρά ( ) //Κενό κατασκευαστή

{

_size = 0 ?

_mystr = 0 ?

}

MyString :: MyString ( const char * str ) /* κατασκευάσματα και προετοιμάζει ένα string στην τιμή * /

{

if ( ! str )

{ _size = 0 ? _mystr = 0 ? } /* αν δεν έχει αξία , string είναι άδειο * /

άλλο

{ _size = strlen ( str ) ?

_string = new char [ _size +1 ] ? /* Αυτό είναι δυναμική κατανομή μνήμης μας , με βάση το μέγεθος της παραμέτρου * /

strcopy ( _string , str ) ?

} }


Η 12

Ορίστε τη λειτουργία καταστροφέα . Αυτή η λειτουργία χρησιμοποιείται για να de - κατανέμουν τη δυναμική μνήμη . Κάθε φορά που η μνήμη που χρησιμοποιείται αλλαγές , ο υπολογιστής πρέπει να γνωρίζουν ότι μπορεί να χρησιμοποιήσει αυτό το τμήμα της μνήμης για άλλους σκοπούς ? Η διαδικασία αυτή ονομάζεται de - κατανομή . Ο κωδικός :

MyString :: ~ MyString

{ delete [ ] _mystr ? } /* Αποδεσμεύει δυναμική μνήμη μας * /
Η 13

Ορίστε τη λειτουργία για να επιστρέψει το μέγεθος της συμβολοσειράς και εξόδου το string . Το μέγεθος είναι απλή . Μόλις εμφανιστεί η αξία του _size :

int MyString :: getSize ( ) { επιστροφή ( _size ) ? }

Για να γράψουμε το , θα είμαστε σε έξοδο κάθε χαρακτήρα μέχρι να φτάσουμε στο τέλος του κορδόνι ( που συμβαίνει να είναι η αξία της _size ) :

void MyString :: outputmystring ( ) {

για ( int αριθμό = 0 ? μετράνε == μέγεθος ? μετράνε + + )

{ cout <<_mystr [ μετρούν ] ? }

cout < Η 14

Εδώ είναι πλήρης κωδικός σας για mystring.cpp :

/* mystring.cpp * /

# include

# include

MyString :: Συμβολοσειρά ( ) //Κενό κατασκευαστή

{

_size = 0 ?

_mystr = 0 ?

}

MyString :: MyString ( const char * str ) /* κατασκευάσματα και προετοιμάζει ένα string στην τιμή * /

{

αν ( str )

{ _size = 0 ? ! _mystr = 0 ? } /* αν δεν αξία , string είναι άδειο * /

άλλο

{ _size = strlen ( str ) ?

_string = νέα char [ _size +1 ] ? /* Αυτό είναι δυναμική μας κατανομή μνήμης , με βάση το μέγεθος της παραμέτρου * /

strcopy ( _string , str ) ?

} }


MyString :: ~ Συμβολοσειρά

{ delete [ ] _mystr ? } /* αποδεσμεύει δυναμική μνήμη μας * /int

MyString :: getSize ( ) { επιστροφή ( _size ) ? }

άκυρη MyString : : outputmystring ( ) {

για ( int αριθμό = 0 ? μετράνε == μέγεθος ? μετράνε + + )

{ cout <<_mystr [ μέτρηση ] ? }

cout < Η
εικόνων

Συναφής σύστασή

Πνευματικά δικαιώματα © Γνώση Υπολογιστών Όλα τα δικαιώματα κατοχυρωμένα