Hallo und Willkommen. In diesem Vortrag werde
ich eine Lösung für unsere vorherige Herausforderung demonstrieren.
Ich werde durchgehen, wie wir
die Zeichen in einer Zeichenfolge mit der Funktion
str length umkehren können, und auch das Sortieren von
Zeichenfolgen mit str compare und str copy
sowie mit dem Bubble-Algorithmus.
Lassen Sie uns Codeblöcke aufrufen.
Und ich werde nur ein einziges Programm erstellen, das ich dafür denke. Ich habe in der Herausforderung
erwähnt, dass Sie zwei Programme erstellen.
Aber der Einfachheit und Demonstration halber werde ich nur eine einzige erstellen.
Erstellen Sie
ein Projekt, ich werde es
nur als Zeichenfolgenfunktionen oder eine Variation davon bezeichnen.
Nennen wir es ein Beispiel für
allgemeine Zeichenfolgenfunktionen.
Beginnen wir also mit dem Gegenteil. Das Gegenteil kann von selbst funktionieren oder wir
können es einfach in die Hauptfunktion setzen. Ich würde es in die Hauptsache setzen.
Als erstes möchte ich eine erstellen - nun, als erstes
möchte ich die richtige Header-Datei einschließen, damit ich diese Zeichenfolgenfunktionen verwenden
kann, die meine Include-Zeichenfolge sind. h.
Hier enthält es alle netten String-Funktionen.
Jetzt werde ich ein Zeichenarray erstellen. Ich werde es eine Größe 100 machen.
Es ist nur willkürlich
und kann nur Dinge speichern, die größer als 100 sind.
Ich werde ein paar lokale Variablen erstellen,
die mir beim Parsen helfen. Und was ich tun möchte, ist, dass
ich dem Benutzer zuerst einige Ausgaben anzeigen möchte.
Also werde ich nur ein paar
Zeilenvorschübe sagen, einzelne, einzelne
Zeichen in Zeichenfolge und in umgekehrter Reihenfolge drucken.
Das sagt dem Benutzer, was los ist, und druckt es dann auch aus,
um es deutlicher zu machen. Drucken Sie
einfach so etwas aus, damit es leichter zu lesen ist.
Ich werde sagen, geben Sie die Zeichenfolge ein. Ich werde in der Zeichenfolge lesen.
Und dann werde ich die Zeichenfolge speichern.
Also werde ich
scanf sagen, s präsentieren und ich werde str sagen.
Und ich muss das kaufmännische Und nicht weitergeben, um es einzulesen.
Dann werde ich die Saitenlänge bekommen. Ich werde das in meine lokale Variable einfügen.
Ich kann also str link aufrufen, indem ich nur die str-Länge sage, die in der Zeichenfolge übergeben wird,
und es wird zurückgegeben, wie viele Zeichen in dieser Zeichenfolge enthalten sind. Sehr, sehr einfach.
Und dann werde ich etwas ausdrucken, um ihnen zu sagen, dass die Zeichen in umgekehrter Reihenfolge sind.
Also die Zeichen der Zeichenkette in
umgekehrter Reihenfolge r Backslash n.
Dann schreibe ich eine nette kleine for-Schleife, die durch
mein Array und entsprechend der Länge geht und sie einfach umkehrt.
Also werde ich sagen, denn ich bin gleich l.
Also werde ich im eigentlichen String-Array
rückwärts gehen. Ich werde am Ende anfangen und vorwärts gehen.
Und sagen Sie, ich bin größer oder gleich
0 und ich minus minus. Und Sie bemerken, dass ich keine
Null-Abschlusszeichen betrachten muss, wenn ich es so mache.
Dann drucke ich einfach jedes Zeichen aus, wenn ich darauf stoße.
Um ein Zeichen auszudrucken und zu sehen, machen Sie einfach den Prozentsatz c.
Und mach das einfach und sag str sub-I.
Und das ist es im Grunde.
Und dann drucke ich einfach eine neue Zeile aus.
Und tatsächlich werde ich ein paar Dinge ausdrucken, nur um es zu beenden,
ein paar Striche.
Mal sehen, ob das funktioniert, sehr einfach, wie es eigentlich sein sollte,
um die Länge zu bekommen, sollte nicht schwierig sein.
Und ich habe einen Zeilenvorschub vergessen, also lassen Sie uns das beheben.
Hier heißt es also, einzelne Zeichen der Zeichenfolge umzukehren oder die Zeichenfolge einzugeben.
Jetzt scanf, es wird nur eingelesen. Also, wenn ich Jason Space Feden betrete.
Scanf wird nur Jason und den Raum lesen.
Sie möchten eine andere Funktion wie f get s verwenden, wenn Sie das Ganze lesen möchten.
Also, was dies tun wird, wird nur Jason Nosaj
ausdrucken, was es tut. Die Zeichen der Umkehrung der Zeichenfolge sind nosaj.
Das ist ziemlich einfach, keine sehr komplizierte Funktion
oder Implementierung.
Versuchen wir es jetzt mit dem Sortieren einer Zeichenfolge.
Und jetzt werde ich etwas tun. Und ich werde es hauptsächlich für den Moment tun, denke ich.
Ich sollte diese in tatsächliche Funktionen einfügen, aber wir demonstrieren
in dieser Vorlesung keine Funktionen, wir demonstrieren Zeichenfolgen.
Erstellen wir also ein paar weitere lokale Variablen, die wir benötigen werden.
Hauptsächlich werden wir einen Namen erstellen.
In diesem Fall wollte
ich eine Reihe von Zeichenfolgen erstellen. Wir werden ein Array von Strings erstellen und f get s verwenden.
Ich werde eine Reihe von Zeichenfolgen erstellen. Das sieht also wie ein
zweidimensionales Array aus.
Wir erstellen hier also 25 Zeichenfolgen der Größe 50.
Dann werde ich auch eine weitere von nur 25 erstellen, die
jede Zeichenfolge enthält.
Und dann werde ich zwei
weitere Variablen hinzufügen. Ich werde ein n und ein j hinzufügen.
Nachdem wir das Gegenteil getan haben, werde ich ausdrucken.
Eine weitere Meldung,
die besagt, was wir tun,
sortiert die Zeichenfolgen eines Arrays mithilfe der Blasensortierung.
Ich werde dir die Blasensortierung nicht erklären. Denn auch dies ist nur ein Algorithmus, der für
unsere Arbeit nicht relevant ist. Wirklich, es ist nur eine Möglichkeit zu sortieren.
Es ist eine der einfachsten Sorten, weil Sie im Wesentlichen nur tauschen.
Aber wir wollen zuerst herausfinden, wie viele Zeichenfolgen sie eingeben werden. Also sagen wir printf, geben
Sie die Anzahl
der Zeichenfolgen ein, und dann sagen wir scanf.
Scanf kann hier verwendet werden, da es sich nur um eine Zahl handelt.
Wir werden Prozent d sagen und das in unserer lokalen Variablen n speichern.
Wieder weiß ich, dass ich hier keine großen
Namen verwende, aber ich demonstriere etwas. Da es ein ist, müssen wir das kaufmännische Und übergeben.
Dann werde ich sie bitten, die Zeichenfolgen einzugeben.
Hier sage
ich also die Eingabezeichenfolge
1 2 oder 3, gefolgt von einem Zeilenvorschub.
Dies ist nur die Nummer, die sie eingeben müssen.
String eins, String zwei oder String drei.
Dann habe ich tatsächlich eine Schleife, die durchgeht und die Eingabe erhält.
Hier sage ich also, denn ich bin gleich 0,
ich bin kleiner als gleich n für die Anzahl der Zeichenfolgen, die
sie eingeben möchten, und ich plus plus oder plus plus I.
Hier werde ich die Zeichenfolge tatsächlich lesen und eine andere Art des Lesens verwenden
- ich habe überlegt, f get s zu verwenden, damit
Sie eine Zeichenfolge mit Leerzeichen eingeben können. Aber ich glaube nicht, dass wir das brauchten.
Wir scannen f
und werden in scanf in unser Namensarray
einlesen.
Denken Sie daran, wir haben einen Namen und dies ist eine Zeichenfolge, die im
Wesentlichen aus 25 Zeichen besteht.
Die 50 Zeichen 25 Wörter.
Sie können also maximal 25 Wörter eingeben.
Also werden wir dies in
unserem Namensarray speichern. Also sagen wir einfach scanf.
Wir werden einen String einlesen und ihn in den Namen
Sub I setzen.
Und so haben wir unsere Arrays gespeichert, wir können nur bis zu 25 speichern.
Jetzt sind wir mit unserer Schleife fertig und können jetzt einfach unsere Blasensortierung schreiben.
Und so unsere Blasensorte, ich werde es Ihnen nicht erklären, ich werde Ihnen nur sagen, dass es
ein ziemlich einfacher Algorithmus ist, der eine innere Schleife hat.
Sie haben also eine for-Schleife, die durchlaufen wird. I ist in allen
Zeichenfolgen gleich 1.
Und dann gehen Sie in Ihrer inneren Schleife von Null auf
alle Saiten minus Eins. Und Sie vergleichen diese erste Zeichenfolge mit allen anderen Zeichenfolgen.
Und Sie sprudeln sie im Wesentlichen nach unten. Wichtig ist
hier jedoch die str-Vergleichsfunktion.
Lassen Sie mich nur versuchen, diese Einrückung
in den str-Kopierfunktionen korrekt zu erhalten. Dies ist wirklich wichtig.
Sie werden feststellen, dass ich für beide vier keine Endklammern habe, da
sie einzelne Anweisungen enthalten.
Auch wenn dieses if etwas in seinem if-Körper hat, ist dies nur eine Aussage.
Wir vergleichen also jedes Wort mit jedem anderen Wort im Wesentlichen,
nachdem wir zuvor eines verglichen haben.
Also sagen wir, wenn str den Namen sub j
und den Namen sub j sub eins
vergleicht, so benötigt str compare
zwei Argumente, zwei Zeichenarrays,
wirklich Zeichenzeiger.
Und wenn sie gleich sind, wird es Null zurückgeben.
Wenn der erste Parameter kleiner als
der zweite Parameter ist, wird weniger
als Null zurückgegeben.
Und wenn der erste Parameter größer als der zweite Parameter
ist, wird er größer als null, eins zurückgeben.
Wenn also die erste Zeichenfolge größer als die zweite Zeichenfolge ist,
möchten wir alles austauschen. Und deshalb haben wir diese Temperatur.
Temp speichert tatsächlich eine temporäre temporäre Zeichenfolge.
Also geben wir den temporären Namen sub j ein und
tauschen dann den Namen sub j mit den Namen j plus eins aus.
So funktioniert die Blasensortierung. Auch hier ist str compare und str copy wichtig.
Und wenn Sie sicher sind, möchten Sie strn compare verwenden.
Und wenn Sie nicht vergleichen. Nun, eigentlich strn compare, das
interessiert dich nicht, denn das ist nur, wenn du das Präfix vergleichen willst.
Für str copy möchten Sie tatsächlich strn copy verwenden.
Und dieser dritte Parameter ist wichtig.
Wenn Sie also kopieren möchten, möchten Sie nur sicherstellen, dass Sie nicht
mehr als die temporäre Größe minus eins kopieren, da sonst ein Pufferüberlauf auftritt.
Sie würden also all dies auch verwenden - wenn
es kein Zeichenpuffer wäre, möchten Sie wahrscheinlich str length verwenden,
wenn es ein Zeiger wäre. Aber die Größe des Willens funktioniert gut dafür.
Dies beseitigt wiederum alle Pufferüberläufe.
Es ist also immer sicherer, strn copy und one
zu verwenden, da wir unseren Null-Terminator haben, der am Ende stehen muss.
Hier ist es also nur das Quellziel für die strn-Kopie.
Wir kopieren den Namen sub j in temp und das gleiche mit den Namen j
plus eins und name sub j. Und zum Schluss temp in Namen sub
j plus eins. Und ich muss
diese Variablen tatsächlich aktualisieren, weil sie falsch sind,
weil sie immer die Quelle sein müssen. Nennen Sie hier also den Namen sub j.
Und dann wäre der letzte
Name von j plus eins, j plus eins.
Das ist also strn copy und str compare, sehr einfach zu bedienende Funktionen.
Nachdem wir sie sortiert haben, möchten wir sie nur noch ausdrucken.
Wir möchten also sagen, dass die Zeichenfolgen nach dem
Sortieren angezeigt werden,
sie in den Zeilenvorschub einfügen und dann
eine Schleife
durchlaufen, um alle Zeichenfolgen in unserem Array auszudrucken.
Also sagen wir 4 I gleich 0.
I ist kleiner oder gleich n, weil das n angibt,
wie viele Zeichenfolgen wir sortiert und eingegeben haben.
Dann wollen wir nur noch unsere String-Arrays durchgehen.
Wir wollen also den Zeilenvorschub von printf
und den Namen sub I sagen.
Name Sub I ist also eigentlich unser sortiertes Array, deshalb hatten wir
Namen Name Sub I.
Auch wenn wir den zweiten nicht haben, weil dies die Größe jedes Zeichens darstellt.
25 Wörter à 50 max.
Mal sehen, ob das funktioniert.
Baue es, habe ein paar Nachrichten bekommen, weil ich nicht weiß, wie ich buchstabieren soll.
Und wenn wir das machen. Wir werden zuerst unsere Umkehrfunktion ausführen, damit Sie das
wieder sehen können, da wir im selben Programm enthalten sind.
Sag Fedin und idf das ist gut.
Geben Sie die Anzahl der Zeichenfolgen ein, die sortiert werden sollen. Sagen wir fünf, sagen
wir zzzz, nur damit es klar ist, so
etwas.
Ich habe dort ein wenig durcheinander gebracht, aber es sieht so aus, als hätte es es sortiert, a b d f r z.
So funktioniert es. Ich habe jedoch
einen Fehler, weil Eingabezeichenfolge Prozent d.
Ich gebe die Anzahl der Zeichenfolgen in n ein und sage dann weniger
als gleich, ich sollte nur weniger als sagen.
Lassen Sie es uns noch einmal ausführen, um es zu demonstrieren, aber ich muss es bauen.
Vergiss nicht zu bauen, nachdem du Dinge geändert hast.
Auch hier sagen wir einfach etwas und nummerieren
dann Zeichenfolgen. Lass uns
einfach vier machen.
Dann alphabetisieren sie sie und sagen d e l z, sieht also gut aus.
Sie können diesen Code also definitiv verbessern, indem Sie alles in
Funktionen einfügen und modularer gestalten möchten. Aber ich versuche mit dieser Aufgabe durchzukommen,
wie Sie str compare verwenden, wie Sie strn copy verwenden und wie
Sie str length verwenden können.
Sie sollten auch mit der Str-Katze,
der Strn-Katze und der anderen gemeinsamen Funktion herumspielen.
Vielleicht möchten Sie mit strstr, strchar für die Suche herumspielen. Diese sind wirklich sehr,
sehr gut oder das ist, das obere ist, das untere, um Zeichen
zu überprüfen, oder die atoi nad atof Konvertierungsfunktionen.
Vielen Dank. Ich hoffe das war hilfreich.