Operacje na tekstach (bo matematyka to nie wszystko…)

Poprzedni wpis z tej serii, zatytułowany Wyrażenia logiczne (gdzie sens? gdzie logika?) poświęcony był zagadnieniom czysto matematycznym. Jednak nie samą stricte matematyką człowiek żyje, zatem dzisiejszy, dedykowany będzie zagadnieniom związanym z prostymi operacjami na tekstach. Zatem; operacje na tekstach.

Let’s do it!

W omawianych dziś przykładach wykorzystywać będziemy podstawowe operacje na danych typu string oraz powiemy sobie kilka słów nt. operatora konkatenacji tekstów, czyli łączenia wyrażeń.

 

1. Operacje na tekstach – Operator konkatenacji tekstów i niejawna konwersja
Przykład 1

Na powyższym przykładzie widzimy kod prostego programu proszącego użytkownika o wpisanie w konsoli tekstu (swojego imienia), które za pomocą instrukcji Console.ReadLine() wczytuje tekst z klawiatury. Metoda ta wczytuje daną typu string, zadeklarowaną na początku, zatem nie musimy używać innej metody, która dokonywałaby konwersji typu, tak jak miało to miejsce w przykładach, w innych wpisach z tej serii.

W kolejnej linii widzimy wyrażenie w którym zmienna tekst jest zmieniana poprzez przypisanie do niej innej wartości poprzez połączenie wyrazu “Cześć” z wartością wpisaną w konsoli przez użytkownika.

W linii tej widzimy również znak ‘+’, który pełni tu rolę operatora konkatenacji tekstu.

Kolejna linia kodu wyświetla wynik działania programu, zaś kolejna, tj.:

sprawia, że program podaje nam ilość znaków konkatenacji.

Jeśli zaś zmodyfikujemy nasz powyższy kod do postaci:

nasz dotychczasowy znak ‘+’, służący nam w Przykładzie 1 jako operator konkatenacji przyjmuje znaczenie arytmetyczne w którym jest zwykłym plusem, a program w swoim wyniku daje nam za jego przyczyną sumę, czyli liczbę 33.

Natomiast gdy kod przyjmie postać:

w której liczba 10 ujęta zostaje w cudzysłów, przez co już nie jest daną typu integer a łańcuchem znakowym o typie stringprogram w swoim wyniku, jak sami zobaczycie po jego uruchomieniu da nam wartość 1023, co zostanie osiągnięte poprzez znak ‘+’, który znów zostaje tu wykorzystany jako operator nie arytmetyczny, a jako operator konkatenacji.

Wynik tego działania jest również daną typu string, ponieważ kompilator dokonał w tym miejscu niejawnej konwersji liczby 23 z typu integer na typ string.

 

Co się zaś stanie jeśli wykonamy taki kod, kod w którym użyjemy typu całkowitoliczbowego char? Zwróćmy uwagę, że dla tego typu stosujemy tzw. ‘ciapki’.

Otóż jak się okazuje po uruchomieniu tego programu, otrzymujemy w wyniku daną typu string – BA. Zatem znów ‘+’

posłużył nam jako operator konkatenacji, a kompilator dokonał niejawnej konwersji typu wbudowanego char na typ string.

 

W momencie, gdy kod przyjmie postać:

w którym to daną B objęliśmy również ciapkami, program zwróci nam liczbę 131. Jak to się stało? A mianowicie poprzez użycie znaku ‘+’ jako operatora arytmetycznego i dodanie wartości jakie przyjmują litery A i B w postaci dziesiętnej w ASCII.

  • A – 65
  • B – 66

 

2. Operacje na tekstach – Znaki specjalne

Jak już dziś wspomnieliśmy stałe znakowej, czyli literały typu char zapisujemy w tzw. ciapkach (apostrofach), natomiast stałe tekstowe, tj. literały typu string zapisujemy w cudzysłowiu.

Wewnątrz stałych tekstowych mogą jednak występować tzw. znaki specjalne na które również podczas nauki C# powinniśmy zwrócić uwagę i którym poświęcony będzie ten punkt dzisiejszego wpisu.

Znakami specjalnymi są:

  • \’ – znak apostrofu (‘)
  • \” – znak cudzysłowu 
  • \\ – baskslash (\)
  • \n – nowa linia
  • \t – tabulacja pozioma
  • \0  – znak pusty

To oczywiście tylko wybrane znaki specjalne – pełną listę znajdziesz w dokumentacji tu i jeszcze tu.

Wynik zastosowania wymienionych przeze mnie, podstawowych znaków specjalnych osiągniemy poprzez uruchomienie poniższego przykładu.

 

Przykład 2

 

3. Operacje na tekstach – Prezentowanie tekstu

Do tej pory, do prezentowania wyniku naszego programu w konsoli używaliśmy metody Console.WriteLine(). Metoda ta jednak ma również inne wersje niż ta jedyna z której korzystaliśmy dotychczas, np. wersja pozwalająca na formatowanie tekstu. Przejdźmy zatem do przykładu…

 

Przykład 3

W powyższym przykładzie widzimy dwie wersje prezentacji wyniku za pomocą wspomnianej wcześniej metody Console.WriteLine().

Pierwsza z nich jak widzimy w swoim wywołaniu prezentuje łańcuch znakowy, używa konkatenacji oraz niejawnej konwersji.

Drugie wywołanie owej metody używa tzw. elementów formatujących, które ujęte są w nawiasach klamrowych; o tu:

numerowane są od 0 w swej kolejności poprzez tzw. indeksy i występują w postaci łańcucha znakowego. Tuż za nimi widzimy zmienne, które zostaną zaprezentowane w wyniku wywołania naszej metody.

Prócz elementów formatujących jakimi są wyżej przedstawione indeksy możemy użyć innych elementów, które również zawrzeć musimy w nawiasach klamrowych i które przedstawia kolejny przykład.

 

Przykład 4

Jak widzimy, mamy kilka przykładowych wywołań metody Console.WriteLine()zawierającej w nawiasach klamrowych prócz indeksu (pierwsza wartość – obowiązkowa) dodatkową pozycję, która może być np. wyrównaniem bądź specyfikatorem formatu.

W linii 13

widzimy w nawiasach klamrowych wartości 0 i 8 dla imienia oraz 1 i 10 dla nazwiska. Jak wspomniałem pierwszy parametr określa indeks pozycji, drugi (8 lub 10) jest to wyrównanie (domyślnie do prawej) i określa liczbę znaków na których zostanie wyświetlony tekst.

Linia kodu powyżej jest swego rodzaju odnośnikiem aby można było policzyć ilości znaków.

Linia 14 prezentuje ten sam wynik, jednak z wyrównaniem do lewej, co można zauważyć po wykonaniu kodu z przykładu 4.

Kolejna linia, również prezentuje wyrównanie do prawej oraz wyświetlenie zmiennej.

Najistotniejsze są jednak linie 16 i 17 w których użyty został specyfikator formatu – cała lista dostępnych specyfikatorów znajduje się na stronie dokumentacji MSDN.

Powyżej użyliśmy specyfikatora dot. procentów (P) pozwalającego na prezentowanie wartości procentowych. Domyślnie, jeśli nie dodamy dodatkowego ustawienia, np.:

który określa wartość procentową z dokładnością do 4 miejsc po przecinku, wartość prezentowana jest z dokładnością do 2 miejsc.

Ostatnia linia prezentująca specyfikatory formatu, czyli:

przedstawia w rodzaje zapisu zmiennej x. Pierwsza, domyślną, zadeklarowaną wartość, druga zaś zaokrąglającą ja do dwóch znaków po przecinku.

Na koniec, ostatni przykład przedstawiający różnice pomiędzy metodą Console.WriteLine()  a metodą Console.Write().

 

Przykład 5

Jak widzimy po uruchomieniu powyższego kodu, różnica pomiędzy tymi dwoma metodami jest prosta, a mianowicie Console.WriteLine() wyświetla wynik w nowej linii, zaś Console.Write() robi to w tej samej.

Podobny efekt (wynik w nowej linii) jesteśmy w stanie osiągnąć poprzez zastosowanie poznanego już wcześniej znaku specjalnego (\n), tj.:

który pozwala nam przywrócić funkcjonalność jaką daje Console.WriteLine().

 

Na dziś to wszystko. Kolejny wpis już niebawem (nastąpi to znacznie szybciej niż dotychczas – idą święta, więcej czasu dla siebie) w którym to powiemy sobie o kolejności wykonywania działań C# .NET.

Podziel się:

  1. Odpowiedz

    Bardzo dobry wpis, super blog 🙂

    1. Odpowiedz

      Dziękuję. Choć powiem szczerze, Twój podoba mi się bardziej 🙂

    • Yaevinn, 14/04/2017, 22:41

    Odpowiedz

    Świetnie się czyta Twoje wpisy, nie przestawaj tego robić. Nawet jak się starasz i nie wychodzi to i tak wychodzi 😉

    1. Odpowiedz

      Dziękuję Ci za te słowa. Motywują do dalszego działania 🙂

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.