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; } |