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.