Łańcuchy tekstowe - String


Wiadomości ogólne

ZAGADNIENIA

  • Co to jest łańcuch tekstowy
  • Tablica ASCII
  • Zmienne tekstowe
  • Konwersja znak - liczba oraz liczba - znak
  • Wczytywanie tekstów z klawiatury

  • Teksty

    Zmienne znakowe – char (apostrofy) Przykłady poniżej w ramce opisują: deklarowanie i inicjowanie zmiennej znakowej, operacje dodawania liczby do zmiennej znakowej, różnicę pomiędzy znakiem ‘0’ liczbą 0 oraz konwersję znaku na liczbę i liczby na znak, kody ASCII i tzw. rzutowanie.
    UWAGA. W języku C++ instrukcja cout << ‘1’+’1’ wyświetli na ekranie liczbę 98 (bo kod ASCII dla znaku ‘1’ to 49). Wszystkie normalne języki programowania „widząc” znak traktują go jak znak i można go co najwyżej skleić z innym znakiem, tylko w C++ jest „dziwnie”. Sam sposób zapisu konwersji znak-liczba też można w C++ „udziwnić”. Typowy sposób to np. char(liczba). W C++ można dodatkowo (char)65, albo też (char)(65).

    char znak;
    znak='A';
    cout << znak; //A
    //konwersja – znak-liczba
    cout << znak << int(znak) << endl;//A 65
    cout << znak << (int) znak << endl;//A 65
    cout << znak << char(65) << endl;//A A
    //znaki jak liczby!!!
    cout << znak+0 << znak+1 << endl;//65 66
    cout << '1'+'1' << 1+1 << endl; //98 2

    Konwersja liczby na łańcuch tekstowy za pomoca funkcji to_string():


    #include <iostream>
    #include <string>
    using namespace std; int main() {
    int liczba = 123;
    string tekst = to_string(liczba);
    cout << tekst << endl;
    return 0;
    }

    Konwersja string na typ int pomoca funkcji stoi():


    #include <iostream>
    #include <string>
    using namespace std; int main() {
    string liczbaStr = "123";
    int liczba = stoi(liczbaStr);
    cout << liczba << endl;
    return 0;
    }

    Konwersja string na typ double pomoca funkcji stod():


    #include <iostream>
    #include <string>
    using namespace std; int main() {
    string liczbaStr = "123.123";
    double liczba = stod(liczbaStr);
    cout << liczba << endl;
    return 0;
    }

    Przydatne polecenia:

    MetodaOpis
    empty()Zwraca wartość true jeżeli napis jest pusty.
    size(),length()Zwraca ilość znaków w napisie.
    at()Zwraca znak o podanym położeniu, tak jak operator [], z tym że ta metoda jest bezpieczniejsza - wyrzuca wyjątek w przypadku wyjścia poza zakres stringa.
    clear()Usuwa wszystkie znaki z napisu.
    erase(...)Usuwa wybrane znaki.
    find(...)Znajduje podciąg w ciągu.
    swap(...)Zamienia miejscami dwa stringi, a staje się b, a b staje się a.
    substr(...)Zwraca podciąg na podstawie indeksu początkowego i długości podciągu.
    append(...)Dodaje zadany napis na końcu istniejącego ciągu.
    c_str()Zwraca napis w stylu języka C (stały wskaźnik typu const char*).

    W bibliotece standardowej języka C++ nie ma bezpośrednio wbudowanej funkcji reverse() dla typu std::string, która odwracałaby kolejność znaków w ciągu. Jednak istnieje kilka sposobów, aby odwrócić ciąg znaków. Poniżej jeden z nich z zastosowaniem biblioteki <algorithm>
    Użycie funkcji std::reverse() z biblioteki <algorithm>:

    #include <iostream>
    #include <algorithm>
    #include <string>
    using namespace std;

    int main() {
    string tekst = "Hello, World!";
    reverse(tekst.begin(), tekst.end());
    cout << tekst << endl;
    return 0;
    }

    Przykłady zstosowań funkcji z biblioteki string

    W języku C++ funkcja erase() jest częścią klasy std::string i służy do usuwania znaków z ciągu znaków. Oto przykład zastosowania funkcji erase():

    #include <iostream>
    #include <string>
    int main() {
    std::string tekst = "Hello, World!";
    // Usunięcie pojedynczego znaku
    tekst.erase(7, 1); // Usunięcie znaku o indeksie 7 (indeksowanie od 0)
    std::cout << tekst << std::endl; // Wynik: "Hello, orld!"

    // Usunięcie zakresu znaków
    tekst.erase(2, 5); // Usunięcie znaków od indeksu 2 do 6 (indeksowanie od 0)
    std::cout << tekst << std::endl; // Wynik: "He, orld!"

    return 0;
    }








    Przykładowe rozwiązania oraz komentarze do wybranych ćwiczeń i zadań


  • Rozwiązania do ćwiczeń z tej strony


    1 Napisz funkcję ANAGRAM, która zamieni podany jako parametr tekst na jego odwrotność
    2 Napisz funkcję, która utworzy tekst złożony z losowego zlepku liter podanych w parametrze
    3 Napisz funkcję, która policzy ilość liter w tekście. Jako parametr podajemy tekst i literę
    4 Napisz funkcję, która policzy wszystkie litery w tekście – bez spacji
    5 Napisz funkcję PALINDROM, która sprawdzi czy wpisany wyraz jest palindromem (czytany od tyłu jest taki sam).
    a Zmodyfikuj funkcję aby sprawdzała całe zdania - usuń najpierw spacje z tekstu!
    6 Mini szyfrowanie. Napisz funkcję, która zwróci zaszyfrowany tekst. Zasada szyfrowania: kod ASCII każdego znaku zwiększamy o konkretną liczbę
    7 Mini szyfrowanie. Napisz funkcję, która zwróci zaszyfrowany tekst. Zasada szyfrowania: przestawiamy znaki w tekście 1-2 3-4 5-6 itd. 8)
    8 Napisz funkcję, która zliczy samogłoski (spółgłoski) w tekście
    9 Napisz funkcję, która zliczy wyrazy w tekście. Zliczamy spacje +1
    10 Dwie duże liczby znajdują się w łańcuchach tekstowych. Wykonaj ich dodawanie.
  • Problemy
    1. Zliczanie wystąpień określonego znaku w ciągu.
    2. Zamiana wszystkich liter w ciągu na małe lub duże.
    3. Sprawdzanie, czy dwa ciągi znaków są anagramami.
    4. Wyodrębnianie fragmentu ciągu na podstawie indeksów.
    5. Usuwanie białych znaków (spacji, tabulatorów) z ciągu.
    6. Podział ciągu na podstawie określonego znaku lub ciągu separatorów.
    7. Sprawdzanie, czy ciąg jest palindromem (czy czyta się tak samo od przodu i od tyłu).
    8. Zamiana liczby na odpowiadający jej ciąg znaków w innej podstawie (np. liczby binarne, szesnastkowe).
    9. Zastępowanie określonego podciągu w ciągu innym podciągiem.
    10. Porównywanie dwóch ciągów znaków leksykograficznie (alfabetycznie).
    11. Wyznacz długość danego ciągu znaków.
    12. Odwróć kolejność znaków w ciągu.
    13. Sprawdź, czy dany ciąg jest palindromem.
    14. Zamień określony podciąg w ciągu na inny podciąg.
    15. Zamień wszystkie wystąpienia określonego znaku w ciągu na inny znak.
    16. Złącz dwa ciągi znaków w jeden.
    17. Podziel ciąg na podstawie określonego znaku lub ciągu separatorów.
    18. Zamień wszystkie litery w ciągu na duże lub małe.
    19. Usuń wszystkie wystąpienia określonego znaku z ciągu.
    20. Sprawdź, czy dany ciąg zawiera określony podciąg.