Praca z tekstem: Znaki i napisy

Kurs: Wstęp do programowania
Lekcja 2: Podstawy składni języka programowania
Temat 3: Wyrażenia w programowaniu
Podtemat 3: Praca z tekstem: Znaki i napisy

⇓ spis treści ⇓


Manipulacja tekstem to nieodłączna część programowania, szczególnie w aplikacjach, które wymagają interakcji z użytkownikiem, przetwarzania danych wejściowych czy generowania raportów. W tej lekcji zajmiemy się operacjami na tekstach, czyli pracą z pojedynczymi znakami oraz całymi napisami (ciągami znaków). Dowiemy się, jak definiować i manipulować tekstem w różnych językach programowania oraz omówimy najczęstsze operacje, takie jak łączenie, porównywanie i przetwarzanie napisów.

Znaki i napisy: Podstawowe pojęcia

  • Znak (char): W większości języków programowania znak to pojedynczy symbol, na przykład a, 1, ?, który jest reprezentowany jako typ danych char. Znaki są zapisywane w pojedynczym cudzysłowie, np. 'a' lub 'Z'. Każdy znak jest kodowany w pamięci jako liczba, na przykład według standardu ASCII, gdzie A ma wartość 65, a a ma wartość 97.
  • Napis (string): Napis to ciąg znaków, czyli sekwencja symboli, takich jak „Hello, World!” czy „12345”. W niektórych językach, takich jak C++, napisy są przechowywane jako obiekty klasy string, które udostępniają metody do ich manipulacji. W innych, jak C, napisy są reprezentowane jako tablice znaków zakończone znakiem null (\0).

Praca z tekstem obejmuje różne operacje, które są niezbędne w większości aplikacji, od prostych funkcji wyświetlania wiadomości po zaawansowane przetwarzanie danych.

Definiowanie i używanie znaków

Przykłady deklaracji znaków

W wielu językach programowania deklarowanie znaku jest proste. Na przykład:

– W C++:

char litera = 'A';
char cyfra = '7';
char symbol = '$';

– W Pythonie:

znak = 'A'  # Python nie ma oddzielnego typu char, używa typu str

Pojedyncze znaki można porównywać i manipulować nimi, na przykład przekształcać na wartości liczbowe przy użyciu kodów ASCII. W wielu aplikacjach używa się operacji na znakach do sprawdzania, czy dany znak jest literą, cyfrą czy specjalnym symbolem.

Operacje na znakach

Operacje na znakach mogą obejmować porównywanie, konwersję oraz sprawdzanie właściwości znaku. Oto kilka przykładów:

  • Porównywanie znaków: Można porównywać znaki, używając operatorów porównania, takich jak ==, <, >:
char a = 'A';
char b = 'B';
bool wynik = (a < b);  // wynik jest true, ponieważ 'A' ma niższy kod ASCII niż 'B'
  • Konwersja znaków: Można przekształcać znaki na ich kody ASCII lub odwrotnie:
char znak = 'A';
int kodASCII = (int)znak;  // kodASCII wynosi 65
char nowyZnak = (char)(kodASCII + 1);  // nowyZnak to 'B'
  • Sprawdzanie właściwości znaku: W wielu językach istnieją funkcje do sprawdzania, czy znak jest literą, cyfrą czy znakiem specjalnym:
    W C++: isalpha(), isdigit(), ispunct().
char znak = '5';
if (isdigit(znak)) {
    std::cout << "To jest cyfra." << std::endl;
}
Użycie znaków w praktyce

Znaki są szeroko stosowane w przetwarzaniu danych wejściowych od użytkownika, gdzie musimy analizować, co użytkownik wpisał, oraz w aplikacjach tekstowych, gdzie każdy znak ma znaczenie (np. w edytorach tekstu czy analizie danych).

Praca z napisami

Napisy są bardziej złożone niż pojedyncze znaki, ponieważ mogą składać się z dowolnej liczby znaków. Operacje na napisach obejmują łączenie, porównywanie, znajdowanie podciągów, przeszukiwanie i wiele innych. Większość języków programowania udostępnia bogaty zestaw funkcji i metod do manipulacji napisami.

Definiowanie napisów

W zależności od języka programowania, napisy mogą być definiowane na różne sposoby:

  • W C:
char napis[] = "Hello, World!";

Napisy w C są tablicami znaków zakończonymi znakiem null (\0), co oznacza koniec napisu.

  • W C++:
    std::string napis = "Hello, World!";

    C++ posiada klasę string, która upraszcza pracę z napisami i udostępnia wiele przydatnych metod.

  • W Pythonie:
napis = "Hello, World!"
Podstawowe operacje na napisach
  • Łączenie napisów: W C++ można używać operatora +, aby łączyć napisy:
std::string imie = "Jan";
std::string nazwisko = "Kowalski";
std::string pelneImie = imie + " " + nazwisko;  // pelneImie to "Jan Kowalski"

W Pythonie można również używać operatora +:

imie = "Jan"
nazwisko = "Kowalski"
pelne_imie = imie + " " + nazwisko  # pelne_imie to "Jan Kowalski"
  • Porównywanie napisów: Można porównywać napisy, aby sprawdzić, czy są równe, lub określić ich kolejność leksykograficzną.
    W C++:
std::string napis1 = "Apple";
std::string napis2 = "Banana";
if (napis1 < napis2) {
    std::cout << "Apple jest przed Banana w porządku leksykograficznym." << std::endl;
}
  • Znajdowanie długości napisu: Można sprawdzić, ile znaków zawiera napis, używając funkcji length() lub size().
std::string napis = "Hello";
int dlugosc = napis.length();  // dlugosc wynosi 5
  • Dostęp do poszczególnych znaków: Można uzyskać dostęp do konkretnego znaku w napisie, używając indeksowania.
std::string napis = "Hello";
char pierwszyZnak = napis[0];  // pierwszyZnak to 'H'
  • Podciągi i wyszukiwanie: W C++ klasa string udostępnia metody, takie jak substr() do uzyskiwania podciągów oraz find() do wyszukiwania podciągów.
std::string napis = "Hello, World!";
std::string podciag = napis.substr(7, 5);  // podciag to "World"
size_t pozycja = napis.find("World");      // pozycja wynosi 7
Przykłady manipulacji napisami w Pythonie
  • Łączenie napisów:
napis1 = "Dzień"
napis2 = "dobry"
pelny_napis = napis1 + " " + napis2  # pelny_napis to "Dzień dobry"
  • Znajdowanie podciągów:
napis = "To jest przykładowy napis"
if "przykładowy" in napis:
    print("Znaleziono podciąg!")
  • Zmiana wielkości liter:
napis = "Hello, World!"
print(napis.upper())  # Wypisze: HELLO, WORLD!
print(napis.lower())  # Wypisze: hello, world!
Wycinek i indeksowanie

W Pythonie można używać wycinków, aby uzyskać część napisu:

napis = "Hello, World!"
podciag = napis[7:12]  # podciag to "World"
Usuwanie białych znaków

Często konieczne jest usunięcie spacji na początku lub końcu napisu. W Pythonie można użyć metody strip():

napis = "   Witaj świecie!   "
czysty_napis = napis.strip()  # czysty_napis to "Witaj świecie!"

Przetwarzanie i analiza tekstu

W zaawansowanych aplikacjach praca z tekstem może obejmować przetwarzanie danych, wyszukiwanie wzorców (na przykład za pomocą wyrażeń regularnych), konwersję danych oraz analizę zawartości. W takich przypadkach pomocne mogą być biblioteki i narzędzia do manipulacji tekstem.

Wyrażenia regularne

Wyrażenia regularne to potężne narzędzie do wyszukiwania i manipulowania wzorcami w tekście. W Pythonie można używać modułu re:

import re

tekst = "Ala ma kota, a kot ma Alę"
wzorzec = r"kota"
if re.search(wzorzec, tekst):
    print("Znaleziono wzorzec!")
Praktyczne zastosowania manipulacji tekstem
  1. Walidacja danych wejściowych: W aplikacjach internetowych często trzeba sprawdzić, czy użytkownik wpisał poprawny adres e-mail lub numer telefonu. Manipulacja tekstem pozwala na taką walidację.
  2. Generowanie raportów: W aplikacjach biznesowych teksty są używane do generowania raportów, w których trzeba formatować i łączyć dane w czytelny sposób.
  3. Analiza danych: W projektach związanych z przetwarzaniem języka naturalnego (NLP) analiza tekstu jest podstawowym zadaniem, które obejmuje tokenizację, wyszukiwanie wzorców i ekstrakcję informacji.
Podsumowanie

Praca z tekstem, czyli operacje na znakach i napisach, jest nieodłącznym elementem programowania. Zrozumienie, jak manipulować tekstem, pozwala na tworzenie bardziej interaktywnych i funkcjonalnych aplikacji. Niezależnie od języka programowania, operacje na tekstach są używane w szerokim zakresie zastosowań, od prostych aplikacji po zaawansowane systemy przetwarzania danych. Dzięki tej lekcji nauczyłeś się, jak definiować i manipulować znakami oraz napisami, jakie są najważniejsze operacje oraz jakie są ich praktyczne zastosowania.

Następny temat ==> Zmienne i typy danych: Jak je definiować i przypisywać wartości



Spis Treści - Wstęp do programowania

Lekcja 3: Rozwiązywanie problemów i poprawność programów Lekcja 4: Praca z różnymi typami danych Lekcja 5: Obsługa plików i pamięci Lekcja 6: Zaawansowane techniki programistyczne Lekcja 7: Wskaźniki i pamięć dynamiczna Lekcja 8: Struktura kodu i abstrakcja Lekcja 9: Rekurencja i jej zastosowania Lekcja 10: Analiza wydajności algorytmów Lekcja 11: Technika "dziel i zwyciężaj" Lekcja 12: Struktury danych o dynamicznej budowie Lekcja 13: Struktury hierarchiczne: Drzewa Lekcja 14: Struktury danych z bibliotek Lekcja 15: Algorytmy z nawrotami Lekcja 16: Programowanie dynamiczne Lekcja 17: Programowanie zachłanne Lekcja 18: Praca z grafami

Jeśli chciałbyś być poinformowany o następnych kursach to zapisz się do naszego newslettera: