Cześć i witaj. W tym wykładzie
zamierzam zademonstrować rozwiązanie naszego poprzedniego wyzwania.
Omówię, jak możemy odwrócić
znaki w ciągu za pomocą funkcji str
length, a także posortować ciągi za pomocą porównania
str, a także str copy, a
także algorytmu bąbelkowego.
Przywołajmy bloki kodu.
I myślę, że stworzę pojedynczy program do tego. Wspomniałem w wyzwaniu,
że tworzysz dwa programy.
Ale dla uproszczenia i ze względów demonstracyjnych utworzę tylko jeden.
Utwórz
projekt, nadam mu nazwę
funkcjami łańcuchowymi lub jakąś odmianą tego.
Nazwijmy to przykładem typowych funkcji
tekstowych.
Zacznijmy więc od odwrotnej strony. Odwrotność może działać zgodnie z własną funkcją lub
możemy po prostu umieścić ją w głównym. Zamierzałem umieścić to w głównym.
Więc pierwszą rzeczą, którą chcę zrobić, jest utworzenie - cóż, pierwszą rzeczą,
którą chcę zrobić, jest dołączenie prawidłowego pliku nagłówkowego, aby móc używać tych funkcji
ciągów, które są moim ciągiem dołączania. godz.
Tutaj zawiera wszystkie ładne funkcje tekstowe.
Teraz utworzę tablicę znaków. Zrobię to w rozmiarze 100.
To po prostu arbitralne, po
prostu nie będzie w stanie przechowywać rzeczy większych niż 100.
Mam zamiar utworzyć kilka zmiennych lokalnych, które
pomogą mi w analizowaniu. Chcę najpierw wyświetlić
użytkownikowi jakieś dane wyjściowe.
Powiem więc tylko kilka wysuwów
linii, wypiszę
pojedyncze, pojedyncze znaki łańcucha i odwrócę kolejność.
To powie użytkownikowi, co się dzieje, a następnie wydrukuje, aby
było bardziej zrozumiałe, po prostu wydrukuj
coś takiego, aby było łatwiejsze do odczytania.
Powiem, że wprowadź ciąg. Przeczytam tekst.
A potem mam zamiar przechowywać ciąg.
Więc powiem
scanf, present s i zamierzam powiedzieć str.
I nie muszę podawać znaku ampersand, aby go odczytać.
Następnie mam zamiar uzyskać długość sznurka. Zamierzam umieścić to w mojej l zmiennej lokalnej.
Mogę więc wywołać link str, mówiąc po prostu, że długość ciągu jest przekazywana w
ciągu i zwraca liczbę znaków w tym ciągu. Bardzo, bardzo łatwe.
A potem wydrukuję coś, co powie im, że znaki w odwrotnej kolejności.
Czyli znaki łańcucha odwrócone r
odwrotnym ukośnikiem n.
Następnie napiszę ładną małą pętlę for, która przechodzi przez
moją tablicę zgodnie z długością i po prostu ją odwraca.
Więc powiem, że ja równa się l.
Więc zamierzam cofać się w rzeczywistej
tablicy ciągów. Zacznę na końcu i pójdę dalej.
I powiedzmy, że ja jest większe lub równe
0 i ja minus minus. Zauważ, że nie muszę patrzeć na żadne
znaki zakończenia zerowego, kiedy robię to w ten sposób.
Następnie zamierzam po prostu wydrukować każdą postać, gdy ją napotkam.
Aby wydrukować znak i zobaczyć, po prostu wykonaj procenty c.
I po prostu zrób to i powiedz str sub-I.
I to w zasadzie wszystko.
A potem po prostu wydrukuję nowy wiersz.
I właściwie wydrukuję kilka rzeczy, żeby to zakończyć,
kilka myślników.
Zobaczmy, czy to zadziała, bardzo łatwo, a właściwie tak, jak
powinno, uzyskanie długości nie powinno być trudne.
Zapomniałem o linii, więc naprawmy to.
Tutaj jest napisane, że wypisz poszczególne znaki łańcucha w odwrotnej kolejności lub wprowadź ciąg.
Teraz scanf, będzie tylko czytać. Więc jeśli wejdę do Jason Space Feden.
Scanf będzie czytać tylko Jasonowi i kosmosowi.
Chciałbyś użyć innej funkcji, takiej jak f get s, gdybyś chciał przeczytać całość.
Więc co to zrobi, to po prostu odwróci wydrukowanie nosaj
przez Jasona, co robi. Znakami rewersu łańcucha są nosaj.
To całkiem proste, niezbyt skomplikowana funkcja
lub implementacja.
Teraz spróbujmy z sortowaniem łańcucha.
Więc teraz coś zrobię. I myślę, że zrobię to w zasadzie tylko teraz.
Powinienem umieścić je w rzeczywistych funkcjach, ale nie pokazujemy
funkcji w tym wykładzie, pokazujemy ciągi znaków.
Stwórzmy więc kilka dodatkowych zmiennych lokalnych, których będziemy potrzebować.
Przede wszystkim zamierzamy stworzyć nazwę.
W tym przypadku
zamierzałem utworzyć tablicę ciągów. Stworzymy tablicę ciągów i użyjemy f get s.
Mam zamiar utworzyć tablicę ciągów. Więc to wygląda jak
dwuwymiarowa tablica.
Więc to, co tutaj robimy, to tworzymy 25 strun o rozmiarze 50.
Następnie utworzę kolejny z zaledwie 25, który będzie
zawierał każdy ciąg.
A potem dodam jeszcze
dwie zmienne. Dodam n i j.
A więc po tym, jak zrobimy to w odwrotnej kolejności, zamierzam wydrukować.
Kolejny komunikat mówiący
o tym, co robimy, sortuje
ciągi w tablicy przy użyciu sortowania bąbelkowego.
Nie zamierzam ci wyjaśniać sortowania bąbelkowego. Ponownie, to tylko algorytm, który nie ma związku
z tym, co robimy. Naprawdę, to tylko sposób na sortowanie.
Jest to jeden z najłatwiejszych rodzajów, ponieważ zasadniczo po prostu się zamieniasz.
Ale to, co chcemy zrobić, to najpierw chcieć uzyskać, ile strun mają zamiar wprowadzić. Więc powiemy printf
wejściowa liczba
łańcuchów, a następnie powiemy scanf.
Scanf może być tutaj użyty, ponieważ to tylko liczba.
Powiemy procent d i zapiszemy to w naszej zmiennej lokalnej n.
Znowu wiem, że nie używam tutaj
świetnych nazw, ale coś demonstruję. Ponieważ to jest to, musimy podać znak ampersand.
Następnie poproszę ich, aby weszli w struny.
Więc tutaj mam
zamiar powiedzieć ciąg wejściowy
1, 2 lub 3, po którym nastąpi wysunięcie wiersza.
To będzie tylko liczba, którą będą musieli wprowadzić.
Ciąg jeden, dwa lub trzy.
Wtedy faktycznie będę miał pętlę, która przechodzi i pobiera dane wejściowe.
Więc tutaj powiem, że ja równa się 0,
ja jest mniejsze niż równe n dla liczby ciągów, które chcą
wprowadzić i I plus plus lub plus plus I.
Tutaj zamierzam właściwie odczytać ciąg i zamierzam użyć innego sposobu czytania -
myślałem o użyciu funkcji f get s, aby
można było wprowadzić ciąg zawierający spacje. Ale nie sądzę, żebyśmy potrzebowali.
Skanujemy f
i zamierzamy wczytać scanf do naszej tablicy
nazw.
Pamiętaj, że mamy imię i jest to ciąg zasadniczo składający się
z 25 znaków.
50 znaków 25 słów.
Zatem maksymalna liczba słów, które możesz wprowadzić, to 25.
Więc zapiszemy to w
naszej tablicy nazw. Więc powiemy tylko scanf.
Będziemy czytać w łańcuchu i umieścimy go w
nazwie pod I.
Dlatego zapisaliśmy nasze tablice, możemy przechowywać tylko do 25.
Skończyliśmy z naszą pętlą i możemy po prostu zapisać nasze sortowanie bąbelkowe.
A więc nasze sortowanie bąbelkowe, nie zamierzam ci wyjaśniać, powiem ci tylko, że jest
to dość prosty algorytm, który ma wewnętrzną pętlę.
Więc masz pętlę for, przez którą przechodzi, I jest równe 1
przez wszystkie ciągi.
A potem w wewnętrznej pętli przechodzisz od zera do
wszystkich ciągów minus jeden. I porównujesz ten pierwszy ciąg ze wszystkimi innymi.
I zasadniczo je spulchniasz. Ale ważna
jest tutaj funkcja porównywania str.
Pozwólcie, że spróbuję poprawnie uzyskać to
wcięcie w funkcjach kopiowania str, to jest naprawdę ważne.
Zauważysz, że nie mam żadnych nawiasów końcowych dla żadnego z czterech, ponieważ
mają one pojedyncze instrukcje.
Nawet jeśli to ma coś w treści if, jest to tylko jedno stwierdzenie.
Więc zaczynamy od porównywania każdego słowa z każdym innym słowem zasadniczo
po tym, jak porównaliśmy jedno wcześniej.
Więc wtedy mówimy, że jeśli str porównuje nazwę sub
j i nazwę sub j sub jeden,
więc str compare przyjmuje dwa argumenty,
dwie tablice znaków, naprawdę
wskaźniki znaków.
A jeśli są równe, zwróci zero.
Jeśli pierwszy parametr jest mniejszy
niż drugi, zwróci mniej
niż zero.
A jeśli pierwszy parametr jest większy niż drugi,
zwróci wartość większą niż zero, jeden.
Więc to, co to mówi, to to, że jeśli pierwszy ciąg jest większy niż
drugi, to chcemy zamienić wszystko. I dlatego mamy ten temp.
Temp faktycznie przechowuje tymczasowy ciąg tymczasowy.
Wstawiamy więc tymczasową nazwę sub j, a
następnie zamieniamy nazwę sub j na nazwy j plus jeden.
Tak działa sortowanie bąbelkowe. Ponownie, ważne jest tutaj porównanie str Compare i str copy.
A jeśli jesteś bezpieczny, możesz użyć porównania strn.
A kiedy robisz porównanie strn. Cóż, właściwie porównywanie strn, nie
przejmujesz się tym, ponieważ to tylko wtedy, gdy chcesz porównać prefiks.
W przypadku str copy faktycznie chcesz użyć strn copy.
I właśnie ten trzeci parametr jest ważny.
Więc kopiuj strn, chcesz tylko upewnić się, że nie skopiujesz więcej
niż rozmiar temp, minus jeden, ponieważ w przeciwnym razie masz przepełnienie buforu.
Więc możesz to wszystko, możesz również użyć - gdyby
nie był to bufor znaków, prawdopodobnie chciałbyś użyć długości ciągu,
jeśli byłby to wskaźnik. Ale rozmiar będzie do tego odpowiedni.
I znowu, to wyeliminuje wszelkie przepełnienia bufora.
Dlatego zawsze bezpieczniej jest używać kopii strn i
jednego, ponieważ mamy nasz zerowy terminator, który musi zostać umieszczony na końcu.
Więc tutaj jest to tylko miejsce docelowe dla kopii strn.
Kopiujemy name sub j do temp i to samo z nazwami j plus
one i name sub j. I na koniec, temp do nazw sub
j plus jeden. W rzeczywistości
muszę zaktualizować te zmienne, ponieważ są
błędne, ponieważ zawsze muszą być źródłem. Więc nazwij tutaj nazwę sub j.
A potem ostatnia byłaby nazwami
j plus jeden, j plus jeden.
Więc to jest kopiowanie strn i porównanie strn, bardzo łatwe w użyciu funkcje.
Po ich uporządkowaniu chcemy je po prostu wydrukować.
Chcemy więc powiedzieć, że ciągi pojawiają się po sortowaniu,
umieszczamy je w
wysuwu wiersza, a następnie przechodzimy przez
pętlę,
aby wydrukować wszystkie ciągi w naszej tablicy.
Więc mówimy, że 4 I równa się 0.
I jest mniejsze lub równe n, ponieważ n
reprezentuje liczbę ciągów, które posortowaliśmy i wprowadziliśmy.
Następnie chcemy po prostu przejść przez nasz ciąg tablic ciągów.
Chcemy więc powiedzieć, że printf s line
feed i name sub I.
Więc name sub I jest w rzeczywistości naszą posortowaną tablicą, dlatego otrzymaliśmy
nazwy name sub I.
Nawet jeśli nie mamy drugiego, ponieważ reprezentuje on rozmiar każdego znaku.
25 słów po 50 maks.
Zobaczmy więc, czy to zadziała.
Zbuduj to, dostałem kilka wiadomości, ponieważ nie wiem, jak się pisze.
A jeśli to uruchomimy. Najpierw uruchomimy naszą funkcję odwrotną, abyś mógł
to zobaczyć ponownie, ponieważ zawarliśmy w tym samym programie.
Powiedz Fedin i idf, że to dobrze.
Wprowadź liczbę ciągów, które chcemy posortować. Powiedzmy pięć, powiedzmy
zzzz, żeby było jasne, coś w tym
rodzaju.
Trochę zawaliłem, ale wygląda na to, że to załatwiło, a b d f r z.
Więc to działa. Mam jednak jeden
błąd, ponieważ ciąg wejściowy procent d.
Wprowadzam liczbę ciągów w n, a następnie mówię mniej niż równe,
powinienem po prostu powiedzieć mniej niż.
Więc uruchommy to jeszcze raz, aby to zademonstrować, ale muszę to zbudować.
Nie zapomnij budować po zmianie rzeczy.
Ponownie powiemy tutaj cokolwiek, a następnie
ciągi liczbowe. Po
prostu zróbmy cztery.
Więc potem układają je alfabetycznie i mówią d e l z, więc wygląda dobrze.
Możesz więc zdecydowanie ulepszyć ten kod, w którym chciałbyś umieścić wszystko
w funkcjach, uczynić go bardziej modułowym. Ale to, co próbuję przezwyciężyć z tym przypisaniem,
to sposób korzystania z porównania str, w jaki sposób używasz kopiowania strn i
jak możesz używać długości ciągu.
Powinieneś także pobawić się ze str cat,
strn cat i to jest druga prawdziwa wspólna funkcja.
Możesz bawić się strstr, strchar do wyszukiwania. To są naprawdę,
naprawdę dobre lub jest, upper is, lower do sprawdzania
znaków lub funkcje konwersji atoi i atof.
Dziękuję Ci. Mam nadzieję, że to było pomocne.