Przed omówieniem podpunktu warto przypomnieć sobie, że napis to lista liczb, które na koću ma znak specjalny \0.
Przyjrzyjmy się argumentom funkcji. Otrzymujemy napis s i znak c. Mamy zwrócić nowy dynamicznie alokowany napis. Czyli nie wolno nam modyfikować napisu wejściowego pod żadnym pozorem. Przed przejściem dalej ustalmy nagłówek funkcji:
Przyjmijmy, że znak c występuje na pozycji 0. Przechowajmy to w zmiennej pozycja. Następnie sprawdźmy znak po znaku napis. Jeśli natrafimy na sprawdzanej pozycji znak c to zapisujemy w zmiennej pozycja nową pozycje. Kiedy natrafimy na znak końca linii czyli znak specjalny \0. Kod realizujący tę część:
W tym momencie zmienna pozycja + 1 przechowuje długość napisu, który mamy przepisać. Warto zastanowić się nad przypadkiem kiedy znaku nie znajdziemy w napisie. Wtedy pozycja będzie równa 0.
Kolejna część rozwiązania polega na deklaracji nowej listy i przepisanie części napisu. Warto pamiętać, że długość tekstu do przepisania wynosi pozycja + 1, ponieważ ostatni znak musi być znakiem \0.
Odwołując się do wskazówki w zadaniu wykorzystamy funkcje strcmp(), która porównuje dwa napisy. Zgodnie z jej deklaracją:
podajemy jej dwa napisy, które mamy zagwarantowane, że nie zostaną zmienione. Funkcje znajdziemy w bibliotece string.h. Funkcja zwraca liczbę mniejszą od zera, gdy napis_1 < napis_2, 0 gdy napis_1 jest taki sam jak napis_2 oraz liczbę większą od zera gdy napis_1 > napis_2.
Zacznijmy od nagłówka. Funkcja ma na podstawie podanej listy napisów i jej rozmiaru zwrócić wartość logiczną:
Wyrazy są w jakiś sposób ustawione. Naszym zadaniem jest sprawdzić czy są ustawione niemalejąco według porządku leksykograficznego. Warto wykorzystać tu z funkcji strcmp, która zwróci wartość dodatnią, gdy taki porządek będzie zachodził. Żeby sprawdzić czy t napisów jest unikalnych wykonamy tylko t - 1 porównań. Zadanie to realizuje poniższy kod:
Przykładowo funkcja main: