User Tools

Site Tools


cpp:strings

This is an old revision of the document!


Αλφαριθμητικά

Τα αλφαριθμητικά μπορούν να αναπαρασταθούν με δύο τρόπους

  1. Μέσω μιας ακολουθίας χαρακτήρων που περιέχει το χαρακτήρα '\0' στο τέλος.
  2. Μέσω της κλάσης string.

Aκολουθία χαρακτήρων που περιέχει το χαρακτήρα '\0' στο τέλος

char str[12] = "Hello";

ή

char str[12] = { 'H', 'e', 'l', 'l', 'o', '\0' };

Στη C++ είναι διαθέσιμες οι συναρτήσεις διαχείρισης συμβολοσειρών που προέρχονται από τη C, όπως οι παρακάτω:

char *strcpy(char *dest, const char *src);
Αντιγράφει το src στο dest. Τα αλφαριθμητικά δεν πρέπει να επικαλύπτονται μεταξύ τους και θα πρέπει να υπάρχει αρκετός διαθέσιμος χώρος στο dest ώστε να αντιγραφεί το src χωρίς να βγούμε εκτός ορίων.
char *strcat(char *dest, const char *src);
Ενθέτει το src αμέσως μετά το dest. Αποθηκεύει το αποτέλεσμα στο dest. Τα αλφαριθμητικά δεν πρέπει να επικαλύπτονται μεταξύ τους και θα πρέπει να υπάρχει αρκετός διαθέσιμος χώρος στο dest για το προκύπτον αλφαριθμητικό.
int strcmp(const char *s1, const char *s2);
Συγκρίνει τα s1 και s2 μεταξύ τους και επιστρέφει μικρότερο, μεγαλύτερο ή ίσο με το μηδέν εάν το s1 είναι μικρότερο μεγαλύτερο ή ίσο με το s2.
size_t strlen(const char *s);
Επιστρέφει τον αριθμό των χαρακτήρων (μήκος) του αλφαριθμητικού.
char *strchr(const char *str, int c);
Επιστρέφει ένα δείκτη στην πρώτη εμφάνιση του c στο str. Eπιστρέφει NULL εάν δεν εμφανίζεται το c στο str.
char *strrchr(const char *str, int c);
Επιστρέφει ένα δείκτη στην τελευταία εμφάνιση του c στο str. Eπιστρέφει NULL εάν δεν εμφανίζεται το c στο str.
char *strstr(const char *haystack, const char *needle);
Επιστρέφει ένα δείκτη στην πρώτη εμφάνιση του needle στο heystack. Eπιστρέφει NULL εάν δεν εμφανίζεται το needle στο heystack.
char *strstr(const char *haystack, const char *needle);
Επιστρέφει ένα δείκτη στην τελευταία εμφάνιση του needle στο heystack. Επιστρέφει NULL εάν δεν εμφανίζεται το needle στο heystack.

Η κλάση String

Η standard βιβλιοθήκη της C++ διαθέτει την κλάση string η οποία έχει το πλεονέκτημα ότι δεν χρειάζεται να σας απασχολεί η δέσμευση της απαραίτητης μνήμης για την αποθήκευση των αλφαριθμητικών.

Οι βασικές μέθοδοι της κλάσης string είναι οι εξής:

Δείτε το παρακάτω παράδειγμα χρήσης της κλάσης string:

string.cpp
int main(int argc, char *argv[]) {
  string str = "Hello World!";
  cout << str  << endl;
  str.append(" How are you?");
  cout << str << endl;
 
  str = "Hello Wordl!";
  str += " How are you?";
  cout << str << endl;
}

Κατασκευαστές

default constructor
string();
copy constructor
string (const string& str);
substring constructor
string (const string& str, size_t pos, size_t len = npos);
from c-string constructor
string (const char* s);
from c-string sequence
string (const char* s, size_t n);
fill with c
string (size_t n, char c);

Παράδειγμα χρήσης κατασκευαστών

strings_constructor.cpp
#include <iostream>
using namespace std;
 
int main() {
  string str = "Hello World!";
  string copy(str); 
  string substring(str, 0, 5);
  const char *p = str.c_str();
  string fromCString(p);
  string fromCSequence(p, 8);
  string fillwithDollars(5, '$');
 
  cout << str << endl;
  cout << copy << endl;
  cout << substring << endl;
  cout << p << endl;
  cout << fromCString << endl;
  cout << fromCSequence << endl;
  cout << fillwithDollars << endl;  
}

Μέθοδοι

Χωρητικότητα και μέγεθος αλφαριθμητικού

size_t size() const;
Επιστρέφει το μέγεθος του string
size_t length() const;
Μέθοδος ανάλογη της μεθόδου size
size_t capacity() const;
Χωρητικότητα του αλφαριθμητικού (σε bytes)
void resize (size_t n); και 
 void resize (size_t n, char c);
Επεκτείνεται το αλφαριθμητικό ώστε να έχει νέο μέγεθος n.
void reserve (size_t n = 0);
Μεταβάλλει τη χωρητικότητα του αλφαριθμητικού.
void clear();
Διαγράφει τα περιεχόμενα του αλφαριθμητικού
bool empty() const;
Επιστρέφει true εάν το αλφαριθμητικό είναι άδειο.

Πρόσβαση σε χαρακτήρες του αλφαριθμητικού

Μεταβολή του αλφαριθμητικού

Σύγκριση, αναζήτηση, εξαγωγή υπο-αλφαριθμητικών

Διάτρεξη

cpp/strings.1493786002.txt.gz · Last modified: 2017/05/03 03:33 (external edit)