Hallo und willkommen zurück. In dieser Vorlesung möchte ich über Zeichenfolgenfunktionen sprechen.
Ich habe bereits
erwähnt, dass Zeichenfolgen und Zeichenarrays in
c kein variabler Datentyp sind.
Sie können also jeden der Operatoren verwenden, müssen
aber dennoch in der Lage sein, viele Dinge an Zeichenfolgen zu tun.
Sie werden sie manipulieren können.
Du wirst die Länge bekommen wollen. Sie möchten sie
vergleichen, alle möglichen Dinge konvertieren sie wahrscheinlich.
Glücklicherweise enthält die Standardbibliothek eine Reihe von Funktionen, mit denen
Sie diese Art von Operationen ausführen können.
Ich werde zuerst über einige der häufigsten sprechen und
dann in anderen Vorlesungen auf einige spezifischere eingehen.
Wir wissen also bereits, dass eine
Zeichenfolge ein Zeichenarray ist, das durch ein Nullzeichen abgeschlossen wird.
Zeichenketten werden häufig in c-Programmen verwendet.
Glücklicherweise bietet C viele Funktionen, die speziell für die Arbeit mit Zeichenfolgen entwickelt wurden.
Diejenigen, die wir diskutieren werden, sind die häufigsten, die Sie verwenden werden.
Ermitteln Sie zunächst die Länge eines Strings mithilfe der Funktion str length.
Kopieren einer Zeichenfolge in eine andere.
Denken Sie daran, ich habe Ihnen bereits gesagt, dass Sie den Zuweisungsoperator nicht zum Zuweisen einer Zeichenfolge verwenden können.
Sie verwenden also str copy oder strn copy.
Kombinieren Sie außerdem zwei Zeichenfolgen miteinander, um die Verkettung zu gewährleisten.
Es gibt eine Str-Katze und eine Strn-Katze.
Und bestimmen, ob zwei Zeichenfolgen gleich sind.
Auch hier funktioniert der Operator equals equals nicht zum Vergleichen von Zeichenfolgen, da es
sich um Arrays handelt.
Wenn Sie also Zeichenfolgen vergleichen möchten, müssen Sie spezielle Funktionen verwenden, die
von der c-Bibliothek bereitgestellt werden. Str vergleichen und strn vergleichen.
Lassen Sie uns zunächst über die Länge sprechen.
Alle diese Funktionen sind in der Zeichenfolge definiert. Header-Datei, also müssen Sie diese
einschließen, wenn Sie eine dieser Funktionen aufrufen oder aufrufen.
Die Länge einer Zeichenfolge ermitteln.
Str length ist eine Funktion, die die Länge des Strings ermittelt. Sie ist ziemlich einfach.
Es wird als Variable der Größe t zurückgegeben.
Sie können die Variable size t so ziemlich austauschbar mit einem int verwenden.
Aber zuerst müssen Sie diese String-Header-Datei einschließen, wenn Sie die Str-Länge verwenden möchten, und
so verwenden Sie sie.
Grundsätzlich erstellen Sie ein Zeichenfolgenliteral in doppelten Anführungszeichen und weisen es einem Zeichenarray zu.
Sie geben die Größe des Zeichenarrays nicht an.
Der Compiler erledigt das für Sie und fügt den Null-Terminator hinzu.
Sobald Sie meine Zeichenfolge mit einer Zeichenfolgenkonstante
definiert haben, können Sie die Zeichenfolgenlänge aufrufen und einfach dieses Zeichen
übergeben, ziemlich nett.
Es ist eines der am häufigsten verwendeten, da Sie häufig diese Länge einer Zeichenfolge
erhalten möchten, wenn Sie Validierungsprüfungen durchführen, oder wenn Sie
sicherstellen möchten, dass keine Pufferüberläufe vorhanden sind, können Sie dies auch tun.
Diese Funktion ändert die Zeichenfolge.
Der Funktionsheader verwendet also keine Konstante zum
Deklarieren der formalen Parameterzeichenfolge.
Wenn Sie sich die Schnur ansehen würden. Wenn Sie
den Benutzer in Ihr Verzeichnis aufnehmen, werden Sie feststellen, dass
er nicht als Konstante definiert ist.
Strings kopieren. Durch das Kopieren von Zeichenfolgen
wird entweder eine vorhandene Zeichenfolge oder ein
vorhandenes Zeichenarray geändert, in dem einige Daten enthalten sind.
Oder wenn es nichts enthält, möchten Sie etwas hineinstecken.
Da Sie in c keine Erhöhung zuweisen können, können Sie auch keine Zeichenfolgen zuweisen. Ich habe dies bereits erwähnt.
Das Deklarieren eines Zeichens und das anschließende Verwenden des Gleichheitszuweisungsoperators funktioniert nicht.
Sie müssen also die Funktion str copy verwenden, um eine
Zeichenfolge in eine vorhandene Zeichenfolge zu kopieren.
Es ist das Äquivalent eines Operators für Zeichenfolgen, Zuweisungsoperator.
Wenn wir zwei Zeichenarrays als Quelle und Ziel deklarieren, müssen
wir nur str copy source sagen und dann können wir, was auch
immer die Quelle ist, in die Zeichenfolge und das gleiche
mit dem Ziel einfügen.
Sie können dort auch Variablen einfügen, wenn Sie diese kopieren möchten.
Was wir hier tun, ist der erste Parameter, in den Sie kopieren.
Der zweite Parameter ist die Zeichenfolge, die Sie kopieren.
Die Quelle hätte also diese Quelle nach der str-Kopie.
Ziel oder Ziel wäre, dass dies nach dem Aufruf von
str copy das Ziel darin ist.
Die str-Kopierfunktion prüft nicht, ob die Quellzeichenfolge tatsächlich in die Zielzeichenfolge passt.
Was würde also passieren, wenn Sie eine große Saite hätten?
Was würde also in diesem vorherigen Beispiel passieren, wenn ein Ziel 100 Zeichen enthalten würde?
Und anstatt dies als Ziel zu haben, hatte es 100 Zeichen.
Sie haben versucht, es in eine Quelle zu
kopieren, die nur 50 Zeichen hatte. Es würde ein Problem geben.
Die Zielzeichenfolge ist größer als die Quellzeichenfolge, die Sie kopieren.
Wenn wir also versuchen würden, str copy in source zu kopieren, anstatt dies als Quelle zu kopieren, die wir hier
eingeben, wird es fünfmal oder zehnmal bezogen, was auch immer es ist, und eine über 50, würde
es einen Fehler geben.
Und das werde ich demonstrieren.
Ein sicherer Weg zum Kopieren von Zeichenfolgen ist die Verwendung von strn copy. Sie werden feststellen, dass n in strn
copy umgewandelt werden kann.
Strn Kopie nimmt ein drittes Argument.
Die maximale Anzahl der zu kopierenden Zeichen.
Hier geben Sie also an, wie viel Sie kopieren möchten.
Wenn Sie also eine Quelle von 40 und ein Ziel von 12 Größen haben, können
Sie zuerst einen m-Satz erstellen, bei dem nur die Größe der Daten innerhalb eines Ziels auf
Null gesetzt wird. Wenn Sie etwas hinzufügen, wird es automatisch dort sein, don Mach dir darüber keine Sorgen.
Die str-Kopie wird Hallo kopieren, wie geht es Ihnen mit der Quelle, und es
wird nicht überprüft, ob Ihre Arbeit größer als die Quelle ist.
Wenn Sie jedoch eine strn-Kopie erstellen und in ein Ziel
kopieren, wird die Quelle kopiert und nur die ersten 10 Zeichen kopiert.
Dieses dritte Argument sollte also der Größe des Ziels entsprechen.
Gehen wir also in Codeblöcke und schauen uns die Länge der Strs und das Kopieren von Strings an, um
genau zu sehen, wie diese funktionieren.
Also hier haben wir unsere Haupt.
Und die Saitenlänge zu bekommen ist wirklich einfach.
Wir werden unser Charakterarray erstellen. Wir wissen, wie man einen Charakterbereich erstellt. Wir wollen die Größe nicht
angeben, aber wir müssen zuerst den Namen und dann die Klammern setzen.
Und dann können wir es mit allem initialisieren, was wir
wollen, sagen wir in doppelten Anführungszeichen. Doppelte Anführungszeichen stehen für Zeichenfolgenliterale.
Also kann ich einfach sagen, mein Name ist Jason.
Das Endergebnis davon ist, dass s ein
Array mit Zeichen der Größe 17
sein wird.
Alle diese Zeichen plus das Nullterminator.
Der Nullterminator ist der Backslash Null.
Sie müssen das nicht dort einfügen, da es vom Compiler automatisch hinzugefügt wird.
Auf diese Weise können wir eine Zeichenfolge in einem Zeichenarray initialisieren und erstellen.
Um es dann zu drucken, müssen wir nur printf sagen und sagen, dass die Länge ist.
Und dann setzen wir den Prozentsatz
s als Formatbezeichner, um eine Zeichenfolge anzuzeigen.
Und dann sagen wir nur noch den Namen der Zeichenfolge.
Und um nicht verwirrt zu werden, sagen wir einfach meine Saite.
Und wir müssen das kaufmännische Und nicht wie zuvor verwenden, vorherige Beispiele, wir
können nur meine Zeichenfolge sagen. Wenn wir dies kompilieren und
ausführen, müssen wir möglicherweise auch sicherstellen, dass wir den String-Header einschließen.
Wenn wir dies kompilieren und ausführen, sehen Sie die Länge der Zeichenfolge.
Die Länge ist also und ich habe die String-Längenfunktion nicht aufgerufen.
Sie müssen die Funktion also tatsächlich aufrufen, wenn Sie die Länge anzeigen möchten, also
machen Sie einfach so etwas. Sie legen die Zeichenfolge in die Länge der Zeichenfolge.
Wenn Sie es jetzt ausführen, sehen Sie tatsächlich die Länge der Zeichenfolge.
Dies muss keine Zeichenfolge sein, sondern eine tatsächliche.
So würde ich den String anzeigen. Wenn ich die Länge der Zeichenfolge anzeigen
möchte, mache ich beim Aufruf der Funktion Prozent d.
Wenn ich es jetzt
starte, werden Sie feststellen, dass es tatsächlich 16 druckt, was der Länge entspricht.
Es ist also eine ziemlich einfache Funktion, die Str-Länge zu verwenden. Wenn Sie Zeichenfolgen kopieren
möchten, verwenden Sie str compare.
Und Sie möchten strn compare verwenden, um die Bytes tatsächlich anzugeben.
Wenn wir also meinen Namen Jason haben
und dann einen weiteren String erstellen,
behalten wir ihn einfach so bei. Wir müssen nicht einmal
spezifizieren und was wir tun werden, ist
zu sagen, dass wir einen anderen String namens temp
erstellen und das wird gleich str sein
und vergleichen, wir werden übergeben, was wir wollen Kopieren nach.
Erstellen Sie einfach ein leeres Zeichenarray, und wir machen es einfach
zu einer Größe von 50.
Und was wir hier tun werden, ist, dass wir strn copy sagen.
Der erste Parameter ist, wo wir kopieren wollen, wir werden temp sagen.
Der zweite Parameter, den wir kopieren möchten, ist meine Zeichenfolge.
Und dann wollen wir nicht mehr als 50 Bytes übergeben.
Wir können also tatsächlich die Größe der Temperatur angeben, um zu sagen,
dass wir nicht mehr als 50 Bytes übergeben möchten. Und Sie möchten wahrscheinlich -1 für
den Nullterminator ausführen.
Auf diese Weise ist dieser dritte Parameter wirklich wichtig, da es niemals zu Pufferüberläufen kommen wird.
Sie sollten immer strn copy und nicht str copy verwenden.
Und dann können wir hier einfach unsere Zeichenfolge anzeigen, um zu sehen, ob sie kopiert wurde.
Wir könnten Temp sagen, ändern Sie es auf ein Prozent s.
Und wenn wir dies erstellen,
sollten wir sehen, nicht die Länge, wir sollten sehen, dass die Zeichenfolge so
etwas ist, und sie mit einem Semikolon beenden.
Jetzt sollten wir kompilieren, was wir tun.
Jetzt führen wir es aus. Wir sollten nur unsere Zeichenfolge sehen, die kopiert wurde.
Wir sehen also, mein Name ist Jason und das wird
in temp gespeichert, weil wir temp ausgedruckt haben.
Verwenden Sie jedoch immer strn copy. Verwenden Sie keine
str-Kopie, um sicherzustellen, dass keine Pufferüberläufe auftreten.
Und der dritte Parameter sollte immer
das Ziel sein, nicht die
Quelle, das Ziel. Es wäre sinnlos zu sagen, kopieren Sie diese gesamte Zeichenfolge.
Denn wenn dies kleiner ist, werden Sie Probleme haben. Sagen Sie also immer die Größe.
Und Sie sehen, dass Sie den Operator sizeof
verwenden können, um zu sehen, wie viele Bytes sich innerhalb des Zeichens befinden.
Lassen Sie uns über einige weitere Funktionen sprechen.
Wir wissen also, wie man die Länge ermittelt, wie man Zeichenfolgen kopiert und wie man Zeichenfolgen verkettet.
Die Funktion str cap verwendet zwei Argumente, zwei Zeichenfolgen
als Argumente und kopiert die zweite Zeichenfolge am Ende der ersten.
Die zweite Zeichenfolge wird nicht
geändert, nur die erste. Es wird den Wert seines ersten Arguments zurückgeben.
Die Adresse des ersten Zeichens, an die die zweite Zeichenfolge angehängt wird.
Geben Sie also etwas zurück und sagen Sie Ihnen, wo Sie es tatsächlich angehängt haben, falls Sie es jemals verwenden mussten.
In diesem Beispiel erstellen wir eine Zeichenfolge meiner Zeichenfolge,
die nur meine Zeichenfolge mit einem Nullterminator enthält.
Wir erstellen eine Zeichenfolge für die Eingabe, die 80 ist und leer ist.
Wir sagen, geben Sie eine Zeichenfolge ein, die verkettet werden soll. Wir lesen es ein.
Und dann verketten wir es.
Wir drucken die ursprüngliche Zeichenfolge aus, gefolgt von der verketteten Zeichenfolge und der Eingabe.
Danach wird alles, was Sie eingegeben haben, an
das Ende meiner Zeichenfolge gesetzt. Wenn Sie also Jason eingeben, ist es meine Leerzeichenfolge Jason.
Das ist, was meine Saite gleich wäre.
Weil du eine Str-Katze drauf machst.
Zuerst drucken wir den String aus und rufen dann str cat auf.
Die Eingabe wird tatsächlich gleich der Eingabe sein,
meine Zeichenfolge gefolgt von der Eingabe.
Wir werden dieses Beispiel gleich durchgehen. Jetzt hat str cat
genau wie str copy auch eine strn end cat.
So wird die kombinierte Version zur neuen ersten Zeichenfolge.
Genau wie bei der Verkettung von Strings mit der Str-Katze
gibt es eine Strn-Katze.
Str cat hat das gleiche Problem mit str copy. Es kann einen Pufferüberlauf geben. Es wird nicht sichergestellt,
dass die zweite Zeichenfolge in das erste Array passt.
Wenn Sie also nicht genügend Speicherplatz in diesem ersten Array haben, können Probleme mit dem Pufferüberlauf auftreten.
Also, was möchten Sie eine strn Katze verwenden.
Das zweite Argument gibt die maximale Anzahl der hinzuzufügenden Zeichen an.
Wenn Sie beispielsweise eine Strn-Katze und zwei
String-Bugs als Add-On ausführen, werden nur die ersten 13 Zeichen des Add-Ons zu den Bugs hinzugefügt, je
nachdem, was zuerst eintritt. Wenn das Add-On kleiner als
13 ist, wird es nur hinzugefügt, bis Sie den Nullterminator sehen.
In diesem Beispiel erstellen wir also zwei Zeichenfolgen.
Dies ist die Quelle dieses Ziels. Wir machen eine strenge Katze.
Wir kopieren am Ende nur 15 Zeichen
in das Ziel. Was auch immer die Größe des Ziels sein mag, es
ist die Größe des Ziels plus 15, und dann drucken wir es aus.
Schauen wir uns das noch einmal in Codeblöcken an.
Hier ist unser Beispiel und wir werden zwei Zeichenketten-Arrays
erstellen, eine Größe 50, die andere Größe 50.
Wir werden zwei Str-Kopien machen, um sie auf Daten zu setzen.
Dies ist das Ziel der Quelle. Und dann machen wir in Zeile 12 die Strn-Katze.
Und das Ziel wird das sein, woran wir uns verketten.
Die Quelle wird also das sein, was wir verketten werden.
Und wir werden nur 15 Zeichen zuweisen.
Wenn die Quelle also größer als 15 wäre,
würden wir nicht alle kopieren.
Wenn wir dies erstellen und
ausführen, werden Sie nur sehen, dass jetzt
angegeben wird, dass dies die Quelldatei ist, oder dass dies das
Ziel ist, gefolgt von der Quelle.
Es heißt also, dies ist das Ziel, dies ist die Quelle.
Es verkettete das bis zum Ende des Ziels.
Sie möchten also immer strn cat für die Verkettung verwenden, damit keine Pufferüberläufe auftreten.
Lassen Sie uns über str compare sprechen, was ich immer wieder versehentlich
sage, anstatt str copy, str compare.
Zum Vergleichen von Strings müssen wir also auch eine Funktion verwenden.
Wenn Sie eine Zeichenfolge mit einer anderen vergleichen möchten,
können Sie keine doppelten Gleichungen verwenden, die nur nach Referenzen suchen, ob
Sie dieselbe Adresse haben oder nicht. Was Sie also verwenden müssen, ist str compare.
Dadurch wird der Inhalt der Zeichenfolge verglichen.
Das Array wird nicht verglichen. So können Zeichenfolgen verglichen
werden, die in Arrays unterschiedlicher Größe gespeichert sind.
Es werden keine Zeichen verglichen.
Sie können Argumente wie Äpfel und a in doppelten Anführungszeichen verwenden, aber
Sie können keine Zeichenargumente wie ein einzelnes Zeichen a verwenden.
Diese Funktion macht für Zeichenfolgen das, was Vergleichsoperatoren für Zahlen tun.
Die Vergleichsfunktion gibt also
einen Wert zurück, der angibt, ob die Zeichenfolge gleich ist, ob
sie größer oder kleiner als ist.
Wenn es gleich ist, wird es Null zurückgeben.
Wenn es kleiner als ist, wird es weniger als Null zurückgeben, wenn str
eins kleiner als str zwei ist.
Und wenn str zwei kleiner als str eins ist, wird es größer als null zurückgeben.
Und was genau bedeutet das? Lassen Sie mich Ihnen
ein Beispiel geben, wie dies funktioniert.
Lassen Sie uns dies in die Codeblöcke einfügen und ausführen.
Aber hier führen wir eine Reihe von Str-Vergleichen durch, und wir werden Ihnen sagen, was die Werte sind, ob sie kleiner
oder größer als sind, weil es nicht sehr klar ist.
Nehmen wir das also und schauen es uns in Codeblöcken an.
Hier ist unser Beispiel. Und wir vergleichen eine Reihe von Zeichenfolgen und zeigen dann nur die
Ergebnisse von str compare an, unabhängig davon,
ob es sich um eine Null handelt oder was auch immer.
Wenn Sie also zwei Zeichenfolgen a und a vergleichen, müssen sie in doppelten Anführungszeichen stehen.
Und Sie sehen hier, was wir tun, ist auszudrucken, was wir anrufen.
Wir begrenzen
also die Anführungszeichen. Wir setzen den Backslash so, dass wir tatsächlich ein
Anführungszeichen ausdrucken und die Zeichenfolge nicht endet. Wenn wir jedoch a und a
vergleichen, sollte dies Null zurückgeben. Weil Null bedeutet, dass Zeichenfolgen gleich sind.
Wenn wir a und b vergleichen, sollte str compare weniger als
zurückgeben.
Weil a kleiner als b ist.
B a sollte a größer als Null zurückgeben.
Aber lassen Sie uns das durchgehen und sicherstellen, dass ich keine Fehler mache,
und wir werden es tatsächlich in der Ausgabe sehen.
Wenn wir dies ausführen,
können Sie sich besser daran erinnern, welche Nummern zurückgegeben werden sollen.
Wenn Sie also a und a vergleichen, erhalten Sie tatsächlich 0.
Wenn Sie a und b vergleichen, ist b kleiner als
a, also ist es eine negative Eins, etwas kleiner als Null.
Ich hätte vielleicht das Gegenteil sagen können, auch wenn
ich sie immer noch verwirrt habe. Weil a größer als b ist, ist
a größer als b, negativ.
B ist kleiner als a, also erhalten Sie etwas Größeres als Null, was eine Eins ist.
C ist größer als a, also erhalten Sie eins, genau dann, wenn
b größer als a war.
Und dann vergleichen Sie Groß- und Kleinbuchstaben.
Wenn Sie Groß- und Kleinbuchstaben vergleichen, erfolgt die Umkehrung. Z ist tatsächlich kleiner
als Kleinbuchstaben a.
Kapital ist also immer weniger als Kleinbuchstaben.
Wenn Sie versuchen, Äpfel und Apfel zu vergleichen, wird es 1 sein, weil Apfel
weniger als Äpfel ist.
Und so funktionieren die Vergleiche. Es ist wichtig, die 0 größer als 1 oder
kleiner als 1 zu verstehen. Wiederum bedeutet weniger
als Null, dass die erste Zeichenfolge kleiner als die zweite
Zeichenfolge ist.
Und größer als Null bedeutet, dass die erste Zeichenfolge größer als die zweite Zeichenfolge ist.
Diese Funktion ist sehr einfach zu bedienen. Sie müssen sich keine Gedanken
über Strn-Vergleiche machen, da es nicht auf die Größe der Arrays ankommt,
die Sie vergleichen.
Die Funktion str compare vergleicht Zeichenfolgen, bis entsprechende Zeichen gefunden werden, die sich unterscheiden.
Es könnte also bis zum Ende einer der Saiten gehen.
Die Strn-Vergleichsfunktion vergleicht die Zeichenfolgen, bis sie sich unterscheiden oder bis eine Anzahl von
Zeichen verglichen wurde, die durch das dritte Argument angegeben wurden.
In diesem Fall müssen Sie strn compare nicht
für Pufferüberläufe verwenden. Es existiert, aber Sie würden es nur
verwenden, wenn Sie nur eine bestimmte Anzahl von Zeichen vergleichen möchten.
Es wird anders verwendet
als die str-Kopie oder die strn-Kopie oder die strn-Katze.
Der strn-Vergleich sagt nur, dass ich nur so viele Zeichen anzeigen möchte.
Es wäre also nützlich, wenn Sie nur nach einem Präfix suchen.
Wenn Sie also nach Zeichenfolgen suchen möchten, die mit Astro beginnen,
können Sie die Suche auf die ersten fünf Zeichen beschränken
und auf diese Weise strn compare verwenden.
In diesem Beispiel sehen Sie also, dass wir sagen, dass gleich gleich Null ist.
Wenn Sie str compare verwenden, wird häufig eine solche if-Anweisung angezeigt.
Sie sehen, dass str in dieser Anweisung verglichen wird und gleich Null ist, um zu sagen, dass es gleich ist.
Strn compare verwendet also die ersten fünf Zeichen und
vergleicht Astro mit den ersten fünf Zeichen der Astronomie.
Es wird sagen, dass es es gefunden hat. Es wird gleich Null sein und es wird gefundene Astronomie sagen.
Wenn Sie dasselbe tun, es aber mit einer anderen Zeichenfolge vergleichen, die als erstaunlich
bezeichnet wird, wird es nicht gefunden, sondern tatsächlich angezeigt - es wird
sagen, dass erstaunlich größer ist als astro. Es wird also etwas größer als 0
angezeigt, was eine 1 ist, und es werden
keine Daten angezeigt.
Verwenden Sie also str compare, wenn Sie Zeichenfolgen für den gesamten Inhalt vergleichen.
Verwenden Sie strn compare, wenn Sie das Präfix nur mit einer Zeichenfolge vergleichen möchten.
Dieselbe Art von Syntax oder Strn vergleicht nur dieses dritte Argument.
Wir haben viel über einige wirklich
wichtige Funktionen gesprochen, die wir verwenden werden,
hauptsächlich str length, strn copy, strn cat und strn compare.
Wir werden eine Herausforderung haben, bei der Sie diese Funktionen nutzen müssen, um sich damit
vertraut zu machen.
Aber Sie werden sich damit wirklich vertraut machen, weil Sie sie
am Ende immer und immer wieder verwenden werden. Vielen Dank.