Witam i witam ponownie. Chciałbym zademonstrować rozwiązanie
naszego poprzedniego wyzwania, które dotyczyło zrozumienia tablic znaków.
Przede wszystkim napiszemy funkcje pobierające długość łańcucha, funkcję
łączącą łańcuch oraz funkcję sprawdzającą, czy dwa
łańcuchy są równe.
Więc mam zamiar stworzyć projekt. Mam zamiar nazwać
to rozumieniem ciągów znaków.
Pierwszą rzeczą, którą zrobimy, będzie zaimplementowanie tej funkcji długości.
U góry
utworzymy trzy deklaracje funkcji.
Nadamy nazwę pierwszej długości sznurka.
Do nazewnictwa użyjemy obudowy wielbłąda.
To zajmie po prostu stały ciąg znaków.
Skąd więc wiemy, że jest to ciąg znaków, ponieważ jest to tablica
znaków, a następnie wstawimy średnik. To będzie pierwsza, która zostanie utworzona, więc na razie
zatrzymamy się na tym.
Stworzymy tę funkcję, zdefiniujemy
ją poniżej,
więc powinieneś zrozumieć to ładne słowo kluczowe const.
Const oznacza, że jest to ciąg znaków, którego nie można zmienić, nie można go modyfikować.
Powodem, dla którego używamy tutaj const, jest
to, że nie chcemy modyfikować ciągu wewnątrz funkcji, po prostu
chcemy go po prostu przeanalizować, a następnie zwrócić długość i zwrócić liczbę całkowitą.
Ta funkcja jest w rzeczywistości dość łatwa do zaimplementowania, ponieważ po prostu przeglądamy tablicę.
Możemy więc powiedzieć, że liczba równa
się zero. To jest zmienna lokalna.
Można go używać tylko w ramach tej funkcji.
Teraz możesz zadać sobie pytanie, dlaczego nie możemy użyć rozmiaru operatora,
ponieważ rozmiar operatora powie nam rozmiar ciągu, a nie powie nam, ile
znaków znajduje się w tym ciągu.
Ale wszystko, co musimy zrobić, to utworzyć
pętlę i przejść przez tablicę, aż trafimy na terminator zerowy.
Więc możemy spojrzeć na nasz ciąg. Możemy powiedzieć wow,
że liczba łańcuchów nie jest równa terminatorowi null,
terminator null jest reprezentowany wewnątrz pojedynczego pojedynczego znaku
jako odwrotny ukośnik zero.
Możemy też użyć operatora nie równa się, ponieważ porównujemy ze znakami.
I mamy tylko jedną rzecz w treści tej instrukcji while plus plus
count, po prostu rosnąca liczba.
A potem chcemy go zwrócić, po prostu mówimy liczbę zwrotów i to wszystko.
To jest cała funkcja długości łańcucha. Jest to całkiem proste,
ponieważ ciąg znaków znajduje się wewnątrz tablicy,
a ciąg kończy się terminatorem zerowym.
Aby to przetestować, możemy przejść i rozpocząć
naszą główną metodę i możemy stworzyć
kilka stałych znaków, po prostu
powiedz słowo jeden
Jason.
Więc w ten sposób tworzysz tablicę znaków w c.
Nie musisz mieć tam stałej, ale to nie jest modyfikowane.
Użyj słowa kluczowego char, typu danych char, identyfikatora, a następnie nawiasów.
Lepiej nie podawać rozmiaru w nawiasach, ponieważ kompilator c
automatycznie doda terminator o wartości null.
A potem tuż po
operatorze przypisania umieszczasz swój literał ciągu w podwójnych cudzysłowach.
Stworzymy tutaj parę, aby upewnić się, że działa.
Możemy bardzo łatwo wyświetlać ciągi znaków, ponieważ możemy po prostu użyć
symbolu procenta s, z wyjątkiem tego, co naprawdę chcemy tutaj wyświetlić,
to długości. Więc użyjemy procenta
d.
Więc po prostu wypiszemy linki tych trzech
łańcuchów, procent d, będziemy mieli tylko spacje pomiędzy nimi, a następnie
dodamy nowy wiersz.
A to wywoła funkcję długości łańcucha dla każdego słowa,
całkiem proste
tutaj, i to wszystko. Więc teraz możemy zbudować i przetestować i sprawdzić, czy to faktycznie działa.
Powinniśmy zobaczyć jako wynik, że powinniśmy zobaczyć długość
Jasona, która wynosi 5, długość w porządku, która wynosi 2, i długość
wszystkiego, co wygląda na około 8.
Mamy tutaj 5, 2 i 8, co wygląda dobrze.
Więc w ten sposób możesz napisać długość łańcucha. Przejdźmy do funkcji konkatenacji.
Funkcja konkatenacji pobierze
po prostu trzy ciągi i dwie stałe.
I to nic nie zwróci. Po prostu umieści
wynikowy ciąg w pierwszym parametrze.
Więc nazwiemy to concat. Otrzymamy wynik
i będziemy mieć dwa ciągi,
jeden, który chcemy połączyć dwa, a drugi, który
chcemy mieć tylko jeden. Więc nazwiemy ciąg pierwszy, ciąg drugi.
I gotowe. I to jest nasza deklaracja funkcji.
Więc możemy użyć dowolnego miejsca, zanim zostanie zdefiniowane.
Ten również będzie musiał przejść przez tablicę. Będzie musiał po prostu przejść
przez dwie tablice i podczas każdego dodawania do wynikowego ciągu.
Utworzymy kilka zmiennych lokalnych, których możemy używać tylko wewnątrz tej funkcji, int
I i j.
Następnie użyjemy pętli for, aby
przejść przez tablicę. Powiemy, że ja równa się 0.
Str sub 1 lub sub, powinienem powiedzieć, nie
jest równe zerowemu terminatorowi, a
następnie również zwiększa I.
Jesteśmy zaznajomieni z naszą składnią
pętli for, w której jako pierwszą mamy identyfikator pętli.
Przed pierwszym średnikiem, warunek, w którym wyskakujemy przed drugim
średnikiem, a następnie modyfikujemy
zmienną sterującą pętli, aby upewnić się, że nie mamy nieskończonej pętli.
Wszystko, co tutaj robimy, to zapisywanie wyników,
sub I równa się str jeden sub I.
Pamiętaj, że to są znaki, więc użycie tutaj równa się przydział jest całkowicie w porządku.
Nie możemy tego zrobić
w tablicach znaków, ponieważ tablic znaków nie można przypisać tablicy do tablicy.
Musielibyśmy użyć kopii str.
Więc to jest kopiowanie pierwszego ciągu.
A teraz chcemy połączyć drugi ciąg z
wynikami, więc zrobilibyśmy coś bardzo podobnego, z wyjątkiem tego, że zajrzymy
do drugiej tablicy i upewnimy się, że umieścimy go we właściwym miejscu w wyniku.
Więc zrobilibyśmy coś takiego. Przejdziemy od j do
zera, str do j nie jest równe zerowemu terminatorowi ++ j.
Zobaczysz, że wynik to po prostu mówienie I plus j, więc cokolwiek skończyłem.
Jeśli dodam dziesięć znaków, zacznie się teraz
od dziesiątego znaku, ponieważ jest liczony od zera i po prostu
doda do niego j, więc 10 dodać 0, 10 dodać 1 i tak dalej.
I to wszystko.
Ostatnią rzeczą, którą musisz zrobić, która jest naprawdę ważna, jest dodanie tego zerowego terminatora.
Chcemy więc powiedzieć wynik, I dodać j, a następnie
dodać pojedynczy znak, terminator zerowy,
który jest odwrotnym ukośnikiem zero w pojedynczym cudzysłowie.
I to jest nasza funkcja.
Nie musimy niczego zwracać z tej
funkcji, ponieważ po prostu kopiujemy str jeden do drugiego.
Przetestujmy to.
To, czego spodziewałbym się na tym, to przetestować go z kilkoma postaciami.
Skorzystamy z istniejących postaci, które mamy, i po
prostu połączymy kilka.
Musimy więc stworzyć inny
wynik. Więc powiemy
tylko wynik, żeby go wyczyścić.
Tutaj powiemy, że będziemy
musieli określić rozmiar dla tego pierwszego.
Więc zamierzamy po prostu określić rozmiar 50. Zamierzamy to ograniczyć.
Więc te stałe postacie powinny działać.
Teraz powiemy tylko printf,
wydrukujemy ciąg.
Więc powiemy procent s, a potem powiemy concat,
czyli tak to nazwaliśmy. Przekażemy wyniki, a
następnie wyraz pierwszy i drugi.
Więc co to powinno wyświetlić jako wyjście,
a my upewnimy się, że umieścimy to w kilku nowych wierszach.
Powinno to wyświetlić się jako wyjście Jason OK. Więc concat w rzeczywistości nie zwraca żadnych danych, więc
nie mogę umieścić ich bezpośrednio w printf.
Muszę to wywołać, a następnie wyświetlić wynik.
Więc tutaj nazywamy concat.
Wszystko jest umieszczane w wyniku i wyświetlamy wynik.
Więc ponownie, kiedy to uruchomimy, powinniśmy zobaczyć się
z Jasonem w porządku i tak jest.
Trzecią funkcją,
którą chcemy zaimplementować, jest funkcja porównawcza sprawdzająca, czy dwa łańcuchy są równe.
Ta funkcja powinna zwrócić wartość logiczną.
Dlatego chcemy dołączyć nasze standardowe bool.
Możemy więc używać wartości logicznych oraz prawdy i fałszu.
I będzie to faktycznie zdefiniowane jako równe ciągi.
To zajmie stałą tablicę znaków, s1 i inną, aby
sprawdzić, czy dwa ciągi
są równe.
Aby upewnić się, że włączyłem właściwy nagłówek, spróbuję go zbudować
i myślę, że tak zrobiłem, ponieważ teraz mogę
użyć słowa kluczowego bool, ponieważ dołączyłem to i mogę również użyć true false.
Zaimplementujmy więc te równe ciągi.
Będzie to mniej więcej takie
samo po prostu przeglądanie tablicy i sprawdzanie każdego znaku.
Więc utworzymy kilka
zmiennych lokalnych I równa się 0 dla naszej pętli zainicjowanej 0.
W zmiennej logicznej, która po prostu mówi
nam, czy są równe, ponieważ to jest to, co mamy zamiar zwrócić, coś w rodzaju jest równe. Moglibyśmy faktycznie zainicjować to jako fałsz.
To, co chcemy zrobić najpierw, to policzyć.
Chcemy zobaczyć, jak duże są oba
te elementy. Możemy więc mieć pętlę while,
ponieważ potrzebujemy licznika, aby spojrzeć na rozmiar w zasadzie,
aby po prostu sprawdzić, czy
to zakończenie zerowe.
Więc zakładamy, że ciągi, które przekazujemy, mają ten sam rozmiar.
Możemy więc napisać prostą pętlę while. Możesz również napisać oświadczenia if.
W pewnym sensie włączyłem wszystko do
pętli while, które są moimi porównaniami za pomocą operatorów logicznych.
Nie musisz używać operatorów logicznych. Możesz użyć instrukcji if i przejść przez
cały drugi ciąg.
Ale tutaj powiedziałem, że s1 sub I
jest równe s2 sub I i
nie są one równe zerowym terminatorom.
Ponieważ jeśli są równe
terminatorom zerowym, chcemy wyskoczyć, jeśli którykolwiek z nich jest terminatorem zerowym.
Więc teraz mówimy plus plus ja. Ostatnią rzeczą, jaką musimy zrobić, jest po prostu
sprawdzenie, czy są to terminatory zerowe. A jeśli tak, możesz ustawić zmienną
logiczną, aby zwracała właściwe dane.
Więc tutaj możemy powiedzieć, że jeśli s1 sub I
jest równe terminatorowi zerowemu, a s2
sub jest równe terminatorowi zerowemu, ustaw naszą zmienną logiczną na
równe jest, a następnie chcemy to zwrócić.
A potem po prostu powiedz, że zwrot jest równy.
Aby to przetestować, będziemy musieli przetestować dobry i zły ciąg.
Więc idźmy dalej i powiedzmy równe ciągi.
Wypiszę tylko wartość całkowitą logicznej, więc procent
d i powiemy tutaj równe łańcuchy, to zwraca coś, więc możemy
to umieścić w
wyrażeniu print równa się łańcuch. Chcę tylko upewnić się, że
ciągi są
równe, a następnie przekażemy Jason przecinek Jason.
Nazwiemy to, tym razem
powiemy Jasona.
Pierwsza z nich powinna zwrócić jeden, druga -
zero, jeden oznacza prawdę, zero oznacza fałsz.
Kiedy to uruchomimy, zobaczymy jeden i
zero. Jeden dla prawdy i zero dla fałszu, z
wyjątkiem tego, że jest trudny do odczytania, ponieważ nie mamy nowego wiersza. Więc dodajmy nowy wiersz
i po prostu pokażmy ponownie.
Teraz widzimy jedno zero,
prawda fałsz. Jason Jason jest sobie równy.
Jason's Jason nie jest równy.
Oto kilka szybkich funkcji, z
których możesz się teraz nauczyć, dowiedzieć się zasadniczo o tablicach znaków
i sposobie reprezentowania łańcuchów za pomocą tej koncepcji.
Dziękuję Ci. Zamierzam również udostępnić plik źródłowy, abyś mógł przyjrzeć się mu bardziej szczegółowo.
Miejmy nadzieję, że pomogło to w realizacji zadania.