Łańcuchy za pomocą klasy string

W języku C++ istnieją dwa główne sposoby operacji na łańcuchach znaków – za pomocą tablic znaków zakończonych znakiem '\0' oraz za pomocą klasy std::string z biblioteki standardowej C++. Ten drugi sposób jest w wielu przypadkach wygodniejszy. Poniżej zamieszczono kilka przykłady wykonywania podstawowych operacji na obiektach klasy string.

#include <string>  /* Nagłówek zawierający klasę std::string */
#include <cstring> /* Metody z języka C do oprecji na tablicach znaków */
#include <iostream>
 
int main(int argc, char *argv[])
{
    using namespace std;
    string adres = "ul. topolowa"; // Definicja łańcucha za pomocą klasy string
    adres[4] = 'T';
    // Doklejanie łańcucha do innego
    adres += " 17";
    cout << "adres = " << adres << endl;
 
    // Wczytywanie łańcuchów jest proste
    string nazwisko;
    cout << "Podaj swoje nazwisko: ";
    cin >> nazwisko;
 
    // Jeżeli jednak chcemy wczytać cały wiersz to potrzebna jest funkcja
    // getline
    string imiona;
    cout << "Podaj swoje imiona: ";
    cin.get(); // usuń ENTER pozostawiony przy wczytywaniu nazwiska
    getline( cin, imiona );
 
    const string personalia = imiona + " " + nazwisko;
    cout << "personalia = " << personalia << endl;
 
    const char szukany[] = "Top";
    // Metoda find zwraca indeks pierwszego wystąpienia podanego łańcucha albo
    // string::npos, jeżeli nie znaleziono
    unsigned poz = adres.find( szukany );
    cout << "Pozycja szukanego łańcucha: " << szukany << " w łańcuchu 'adres': " << poz << endl;
 
    // Metodę find można stosować do sprawdzania, czy łańcuch zawiera inny
    bool czy_zawiera = ( adres.find("pies") != string::npos );
    cout << "czy_zawiera = " << czy_zawiera << endl;
 
    // Zamiana fragmentu łańcucha na inny
    string nowy_adres = adres;
    // pierwszy parametr to indeks pierwszego zastępowanego znaku, drugi to
    // liczba zastępowanych znaków, ostatni to wstawiany łańcuch
    nowy_adres.replace( nowy_adres.find("Topolowa"), strlen("Topolowa"), "Mickiewicza" );
    cout << "nowy_adres: " << nowy_adres << endl;
 
    // Metodę replace można również zastosować do wstawienia innego łańcucha bez
    // zastępowania znaków, tj. z drugim parametrem równym 0
    nowy_adres.replace( nowy_adres.find("M"), 0, "Adama " );
    cout << "nowy_adres: " << nowy_adres << endl;
 
    // Czasem przydaje się funkcja find_first_of, która szuka pierwszego
    // wystąpienia któregokolwiek ze znaków w łańcuchu będącym pierwszym
    // parametrem
    poz = nowy_adres.find_first_of("aeouiy"); // znajdź pierwszą samogłoskę
    while (poz != string::npos) {
        nowy_adres[poz] = toupper( nowy_adres[poz] ); // zamień na wielką literę
        // znajdź kolejną
        poz = nowy_adres.find_first_of("aeouiy");
    }
    cout << "nowy_adres po zmianie samogłosek na wielkie litery: " << nowy_adres << endl;
 
    // Metoda substr pozwala na utworzenie nowego łańcucha zawierającego
    // fragment poprzedniego
    string s = nowy_adres.substr( nowy_adres.find("M") );
    cout << "s = " << s << endl;
    string s2 = nowy_adres.substr( nowy_adres.find("M"), 3 ); // tylko 3 lit.
    cout << "s2 = " << s2 << endl;
 
    return 0;
}

Post a Comment

Your email is kept private. Required fields are marked *

Możesz użyć następujących tagów oraz atrybutów HTML-a: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>