Metodyka i techniki programowania

09 Łańcuchy znaków

Dr inż. Paweł Kułakowski

Ćwiczenie 1. Stałe znakowe i wskaźniki

1. Umieść w programie następujący fragment kodu:

char tablica1[25], tablica2[25] = "Daj, ac ja pobrusze," ;

char *wskaznik1, *wskaznik2 = "a ty poczywaj" ;

Wyświetl na ekranie całą sentencję, używając zmiennych tablica2 i wskaznik2. Czym, w tym wypadku, różni się użycie tablicy od użycia wskaźnika?

2. Dopisz dalszą część programu, w której powyższe zmienne zostaną zmodyfikowane tak, aby każde słowo zaczynało się od dużej litery. Ponownie wydrukuj na ekranie całą sentencję. Czy były z tym jakieś trudności?

3. Co należy dopisać do tego kodu aby:

- wskaźnik wskaznik1 wskazywał na początek napisu "Daj, ac ja pobrusze," ?

- w tablicy tablica1 znajdował się napis "Daj, ac ja pobrusze," ?

Proszę nie używać funkcji z biblioteki string.h.

4. Jak duża tablica typu char jest potrzebna, aby zapisać w pamięci pojedyncze słowo: POCZYWAJ?

Zadanie

Napisz program obliczający z ilu słów składa się wpisana z klawiatury fraza i jak długie są to słowa. Do wczytywania kilku słów jednocześnie proszę użyć funkcji fgets z biblioteki stdio.h, proszę jednak nie używać żadnych funkcji z biblioteki string.h.

Ćwiczenie 2. Operacje na łańcuchach znaków

1. Poniższy fragment kodu pozwala stwierdzić, czy podany ciąg znaków (zmienna string) zawiera się w podanym słowie (zmienna slowo). Zaimplementuj ten kod uzupełniając go o:

- wczytanie zmiennych string i slowo,

- obliczenie długości ciągów znaków string i slowo (np. bazując na poprzednim zadaniu).

int zgodnosc ;

/* sprawdzanie zgodnosci wykonywane jest wielokrotnie, poczawszy od kolejnych liter slowa : */

for (i=0; i<=(dlugosc_slowa-dlugosc_stringu); i++)

{

zgodnosc = 1 ;

for (j=0; j< dlugosc_stringu; j++) /* sprawdzanie kolejnych liter... */

if (slowo[i+j]!=string[j]) /* gdy dana litera nie pasuje... */

{

zgodnosc = 0 ; /* stwierdzamy brak zgodnosci... */

break ; /* wychodzimy z petli... */

} /* i probujemy sprawdzac od nastepnej litery slowa */

if (zgodnosc==1)

{

printf ("Poczatek szukanego lancucha: od %i znaku.\n", i+1) ;

break ;

}

}

if (zgodnosc == 0) printf ("Brak szukanego lancucha znakow.\n") ; 2. Zmodyfikuj ten program tak, aby pozwalał on na wyszukanie wszystkich wystąpień łańcucha znaków w podanym słowie, a nie tylko pierwszego.

3. Jak zabezpieczyć się przed przypadkiem, gdy string jest dłuższy niż slowo?

Zadanie

Napisz program, który wczyta kilka słów z klawiatury i policzy ile razy w tej frazie występuje każda litera.

Duże i małe litery nie powinny być rozróżniane. Należy założyć, że wczytana fraza może zawierać dowolne znaki.