Łańcuchy znaków

Transkrypt

Łańcuchy znaków
Łańcuchy znaków
Ciągi znaków (ang. strings) używane są do przechowywania i przetwarzania tekstów w programie
(wyrazów, zdań itp.).
W języku C łańcuch znaków jest tablicą znakową, zawierającą wszystkie znaki przechowywanego
tekstu i zakończoną znakiem 0 (NULL, koniec łańcucha).
Stałą znakową w języku C zapisuje się w podwójnych cudzysłowach :
”To jest tekst”
W języku C łańcuch znaków ma ściśle określoną (przez rozmiar tablicy, która go przechowuje)
długość. Przykładowa definicja łańcucha znakowego w programie:
char tekst[80] = { ”To jest tekst” };
char *nazwa = ”Politechnika Rzeszowska”;
Funkcje do operowania na łańcuchach znaków, z biblioteki string.h:
– Wczytywanie łańcucha z klawiatury
gets(lancuch);
//lub – dziala troche inaczej niż powyzsza
scanf(”%s”, lancuch);
– Wypisywanie łańcucha na ekran
puts(lancuch);
//lub
printf(”%s”, lancuch);
– sprawdzanie długości łańcucha
int dlugosc = strlen(lancuch);
– porównywanie łańcuchów
czyRowne = strcmp(lancuch1, lancuch2);
//zwraca 0 gdy są rowne, >0 gdy 1 mniejszy od 2 i <0 gdy 2
//mniejszy od 1
– kopiowanie łańcuchów
strcpy(gdzie_skopiowac, co_skopiowac);
strncpy(gdzie_skopiowac, co_skopiowac, ile_znakow_skopiowac);
– łączenie łańcuchów
strcat(lancuch1, lancuch2);
//do lancucha1 dokleja lancuch2
Zadania
1. Napisz program który wczyta z klawiatury imię, nazwisko i wypisze na ekranie tekst:
Witaj Nazwisko Imię.
2. Napisz program, który będzie wczytywał łańcuch znaków dopóki nie będzie on zgodny
z „hasłem” (zdefiniowanym w programie ciągiem znaków).
3. Napisz program, który będzie wczytywał tekst z klawiatury (aż do wystąpienia znaku nowej
linii) i „dopisywał” do głównego łańcucha znaków. Program powinien pytać, czy wczytać
kolejny tekst i na każdym etapie wypisywać główny łańcuch znaków.
4. Napisz własną funkcję, która obliczy długość łańcucha znaków (odpowiednik strlen).
Przygotuj program, w którym zostanie wywołana funkcja dla przykładowych danych.
5. Napisz funkcję, która w łańcuchu znaków znajduje pierwsze wystąpienie znaku podanego
jako parametr w zmiennej a typu char i zwróci jego pozycję. Napisz program, który pobierze
dane, wywoła tą funkcję i wypisze wynik.
6. Napisz funkcję, która odwróci i połączy dwa łańcuchy znaków. Napisz program, który
pobierze dane, wywoła tą funkcję i wypisze wynik.
Wskaźniki
Na podstawie http://pl.wikibooks.org/wiki/C/Wskaźniki
Wskaźnik (ang. pointer) to specjalny rodzaj zmiennej, w której zapisany jest adres w pamięci
komputera, tzn. wskaźnik wskazuje miejsce, gdzie zapisana jest jakaś informacja. Adres w pamięci
to pewna liczba całkowita, jednoznacznie definiująca położenie pewnego obiektu (czyli np. znaku
czy liczby) w pamięci komputera.
Przykładowo, patrząc na schemat poniżej, zmienna b przechowuje liczbę całkowitą 17. Znajduje się
ona w pamięci komputera pod adresem 1462.
By stworzyć wskaźnik do zmiennej i móc się nim posługiwać należy przypisać mu odpowiednią
wartość (adres obiektu, na jaki ma wskazywać). Adres ten można uzyskać przy pomocy operatora &
(operatora pobrania adresu).:
#include <stdio.h>
int main (void)
{
int liczba = 80;
printf("Zmienna
znajduje
(void*)&liczba, liczba);
sie
pod
adresem:
%p,:
%d\n",
return 0;
}
Aby móc zapisać gdzieś taki adres należy zadeklarować zmienną wskaźnikową. Robi się to poprzez
dodanie * (gwiazdki) po typie na jaki zmienna ma wskazywać, np.:
int *wskaznik1;
Aby dobrać się do wartości wskazywanej przez wskaźnik należy użyć unarnego operatora *
(gwiazdka), zwanego operatorem wyłuskania:
#include <stdio.h>
int main (void)
{
int liczba = 80;
int *wskaznik = &liczba;
*wskaznik = 42;
printf("Wartosc zmiennej: %d, wartosc wskazywana przez wskaznik: %p\n",
liczba, *wskaznik);
liczba = 0x42;
printf("Wartosc zmiennej: %d, wartosc wskazywana przez wskaznik: %p\n",
liczba, *wskaznik);
return 0;
}
Argumentem (lub argumentami) funkcji mogą być wskaźniki. W przypadku "normalnych"
zmiennych nasza funkcja działa tylko na lokalnych kopiach tychże argumentów, natomiast nie
zmienia zmiennych, które zostały podane jako argument. Natomiast w przypadku wskaźnika, każda
operacja na wartości wskazywanej powoduje zmianę wartości zmiennej zewnętrznej. Spróbujmy
rozpatrzeć poniższy przykład:
#include <stdio.h>
void func (int *zmienna)
{
*zmienna = 5;
}
int main ()
{
int z=3;
printf ("z=%d\n", z); /* wypisze 3 */
func(&z);
printf ("z=%d\n", z); /* wypisze 5 */
}
Zadania