Funktionen für die Zeichenfolge in C ++ Handhabung

Funktionen für die Zeichenfolge in C ++ Handhabung
5 (100%) 3 Stimmen




функции strlen (), strcat (), strcpy (), strcmp () в C++

Nachdem, wie wir sind vertraut mit Strings und Zeichen-Arrays in C ++, Blick auf die am häufigsten verwendeten Funktionen für die Arbeit mit ihnen. Die Lektion wird vollständig in der Praxis gebaut werden. Wir werden ihre eigenen Programme-Analoga zur Behandlung von Linien und parallel zur Verwendung von Standard-Bibliotheksfunktionen schreiben cstring (string.h – in älteren Versionen). Sie sind also über sich selbst zu präsentieren, wie sie funktionieren. Die Standard-Bibliotheksfunktionen cstring sind:

  • strlen() – berechnet die Länge der Zeichenfolge (Anzahl der Zeichen, mit Ausnahme von \0);
  • strcat() – Es kombiniert Strings;
  • strcpy() – Kopien der Symbole von einer Zeile zur anderen;
  • strcmp() – vergleicht zusammen zwei Saiten .

Es ist sicherlich nicht alle Funktionen, nur diejenigen, der an dem Gegenstand bedeckt.

strlen() (Länge der Wörter – Länge)

Unser Programm, welche berechnet die Anzahl der Zeichen pro Zeile:

Um die Zeichen in einer Reihe von unbestimmter Länge berechnen (da der Benutzer gibt es), wir verwendet, um den Zyklus während – Linien 13 – 17. Er geht durch alle Zellen der Anordnung (alle Zeichen der Zeichenfolge) abwechselnd, beginnend mit Null. Wenn zu einem bestimmten Schrittzyklus zu treffen Box ourStr [amountOfSymbol], dass speichert Symbol \0, Bust-Zyklus Pause Symbole und erhöhen den Zähler amountOfSymbol.

So wird der Code aussehen, der Ersatz von unserem Codeabschnitt auf die Funktion strlen():

Wie Sie sehen können, Dieser Funktionscode. Es musste nicht zusätzliche Variablen zu deklarieren und eine Schleife verwenden. Der Ausgabestrom cout wir gingen in die Funktion Zeichenfolge – strlen(ourStr). Es wird vorgeschlagen, dass die Länge der Leitung und zurück zu der Programmnummer. Wie in dem vorherigen Code-Analog, Symbol \0 nicht in der Gesamtzahl der Zeichen enthalten.

Das Ergebnis ist das Programm in der ersten und zweiten ähnlich:

функция strlen () в C++

strcat() (Verkettung von Worten – Verbindung)

Programm, daß das Ende einer Zeile, anhängt die zweite Zeile. Mit anderen Worten – Es verbindet zwei Linien.

Nach Kommentaren im Code sollte alles klar sein. Im Folgenden schreiben wir ein Programm um die gleiche Aktion ausführen, aber unter Verwendung von strcat(). In dieser Funktion werden wir zwei Argumente geben (zwei Linien) – strcat(someText1, someText2); . Die Funktion fügt einen String someText2 auf Linie someText1. Zur gleichen Symbol ' 0' Am Ende someText1 Es wird das erste Zeichen überschreiben someText2. Sie fügt hinzu, auch eine endgültige ' 0'

Die Umsetzung der Vereinigung von zwei Linien, Mit der Standardfunktion, Ich nahm eine Zeile Code im Programm – 14-Reihe.

Ergebnis:

strcat c++, strcat_s c++

Was sollte die Aufmerksamkeit auf den ersten und zweiten Code zahlen – Größe des ersten Zeichens des Arrays sollte für die zweite Anordnung von Zeichen Räumlichkeiten ausreichen. Wenn die Größe nicht ausreicht, – kann Unerwarteter Programmabbruch auftreten, da die Linie aus dem Speicher der Aufnahme, das belegt die erste Reihe. beispielsweise:

In diesem Fall, strokovaya konstant “Erfahren C ++ c us!” Es kann nicht in das Array geschrieben werden someText1. Da gibt es nicht genug Platz, für solche Operationen.

Wenn Sie eine aktuelle Version von Microsoft Visual Studio-Entwicklungsumgebung verwenden, Sie können die folgenden Fehler auftreten:: “Fehler C4996: "strcat’: Diese Funktion oder Variable kann gefährlich sein. Erwägen Sie die Verwendung strcat_s stattdessen. So deaktivieren Sie deprecation, Verwendung _CRT_SECURE_NO_WARNINGS. Siehe Online-Hilfe.” Dies liegt daran,, das hat eine neue, sicherere Version der Funktion entwickelt strcat – Das strcat_s. Sie sorgt sich um, damit es sein Pufferüberlauf (Zeichen-Array, die erzeugte Datensatz zweite Zeile). Umwelt bietet Ihnen eine neue Funktion zu verwenden,, anstelle der veralteten. Lesen Sie mehr über das sein kann auf der MSDN-Website. Dieser Fehler kann auftreten, wenn Sie die Funktion verwenden strcpy, die werden im Folgenden erörtert.

strcpy() (Slowenien Kopie – Kopieren)

Verkaufen Sie eine Zeile nach oben und setzen Sie sie anstelle einer anderen Reihe.

Übernehmen Sie die Standardfunktionsbibliothek cstring:

Versuchen Sie zu kompilieren und zuerst, und ein zweites Programm. Sie werden dieses Ergebnis zu sehen:

strcpy c ++

strcmp() (Slowenien vergleichen – Vergleich)

Diese Funktion ist so ausgelegt,: Sie vergleicht die beiden C-String Zeichen für Zeichen. Wenn die Saiten sind identisch (und Symbole und ihre Anzahl) – die Funktion kehrt zu der Programmnummer 0. Wenn die erste Zeile ist länger als eine Sekunde – kehrt der Programmnummer 1, und wenn weniger, die -1. Anzahl -1 damals, wenn die Länge der Leitungen ist, aber die Linien der Zeichen nicht übereinstimmen.

strcmp c ++ Programm mit strcmp():

strcmp c ++

Teilen auf soziale Netzwerke unsere Artikel mit deinen Freunden, die auch die Grundlagen der Programmierung in C ++ lernen.

Auf unserer Website hat bereits die Möglichkeit zu abonnieren, Benachrichtigung über neue Artikel zu erhalten. Um sich anzumelden – geben Sie Ihre E-Mail unter.

Newsletter neue Lektionen über die Programmierung:

22 Gedanken zu "Funktionen für die Zeichenfolge in C ++ Handhabung

  1. Es milyard Stücke, Sie haben verpasst, aber wir beschreiben im Detail die offensichtliche…

    >> Programm, daß das Ende einer Zeile, anhängt die zweite Zeile. Mit anderen Worten - es verbindet zwei Linien.

    und so, und in anderen Worten – verschiedene Aufnahmen, aber das Wesentliche ist nicht klar,.
    bei mir 2 char * Zeichenfolge für jeden zugewiesenen 256 Byte.
    Die erste aufgezeichnete “Hallo”, zweite “Welt”.
    Ich vereinigen sie. Wie viele Bytes ich brauchte? 512 oder 10?

    Antwort und gehen weiter im Text :).

    1. Vladimir, in diesem Artikel Zeiger Thema nicht steigen. Wenn wir über Zeichen-Arrays reden (Si-strokah) Größe 256 Bytes je, nach String-Verkettung “Hallo” und ” Welt”, Zeile, in der die Figuren fertig sind Welt schreiben, nehmen 256 Byte, sowie vor der Fusion.

      strWorld String nimmt strHello Zelllinie, im Anschluss an die Zeichen hallo (strWorld erste Zeichen des Strings “zatret” \0 nach dem Symbol "o’ strHello Linie).

      Arbeiten mit Zeigern auf Strings, natürlich, besser perevydelyat erforderliche Speichermenge Zeichenketten zu speichern, und nicht besetzen zu viel Platz. Es wird sich zeigen, es muss 12 Byte für “Hallo Welt”. Alles in Ordnung – und wir kommen zu dieser :)

      P.S. Kommentare,Code und eine Erklärung ist nicht für Sie, und für Anfänger, die etwas über lesen, was wir reden werden

      1. Die Frage ist wirklich sehr interessant! Ich habe noch nie darüber nachdenken. Auf den ersten Blick, in diesem Datensatz ist nicht verwunderlich,. Aber es funktioniert nicht gut! :) Fehlerzustände “Der Puffer ist zu klein,”. Ein Freund von mir (Vitali) Ich sagte so auf die Frage: “schriftliche Dokumentation, dass “wenn die Funktion Objekte überlappen, sein Verhalten ist nicht definiert.” der Programmierer, so saugte ins Leere schreibt )) ” Nun, auch so weiter: “Es geht nach oben ein Zeichen. Die Funktion sucht \0 die erste Zeile, Funde, Zeichen für Zeichen und beginnt die zweite Reihe zu kleben. ABER! es wird kleben, bis er feststellt, \0 die nicht mehr existiert!
        Vova, Wir sind dankbar,, Wenn Sie wird auch beantworten uns zu diesem Thema.

  2. Nun, rechts Kamerad sagte, Die erste Zeile kopiert die Zeichen von seinem Anfang bis zu seinem Ende, deshalb wächst unendlich.

    Die Mähne ist geschrieben:
    Linien können nicht überlappen, und dest muss genügend Platz um das Ergebnis zu halten.

    In Wirklichkeit gibt es ein Pufferüberlauf, aber rein zufällig könnte es funktionieren (der Fehler kommt nicht aus), aber das Programm modifiziert wird irgendwie unberechenbar.

    Dokapalis ich, dass die Beschreibung dieser Funktion nimmt mana Linien 6. nur, klar auf einmal (und etwa groß genug Puffer, und um den Schnittpunkt der Linien). Sie schreiben einen hundertmal das gleiche mit verschiedenen Wörtern, Ich weiß nicht, warum xD.

    >> P.S. Kommentare,Code und eine Erklärung ist nicht für Sie, und für Anfänger, die etwas über lesen, was wir reden werden.

    Sie schreiben einen Artikel über Codierungskonventionen. Es scheint, wie einige von ihnen die optimale Anzahl von Kommentaren im Code angibt,. Niemand schreibt jede Zeile.

    Ae in nicht indeksiruetsâ Poiskovik (oder bin ich falsch?), so einfach mehr rentabel eine Beschreibung der Code nach dem Code zu setzen, nicht innerhalb.

    Du schreibst, “Funktionen für die mit Strings in C ++ arbeiten”, tatsächlich einmal waren sie in , aber in C ++ gibt , und alt (“sishnye”) String übergeben (hier gibt und beschrieben diese Art strcat, … ). dh. Ich las den Titel und erwarten etwa std lesen::Schnur, und hier… (Sie hat mich betrogen xD).

    1. so keine Kommentare in den Code für jede Zeile )) es gibt nur ein paar Stücke. P.S. Es wurde geschrieben, um, dass Sie nicht denken, wenn ich Ihnen alles gesagt, dies zu erklären. Sie wissen, was – das ist klar ))
      In Bezug auf den Titel. Mit dem Namen kann sicherlich nitpick… Nur wenn der Artikel war über die Zeichenfolge, es wird auch nicht nennen “Funktionen für die mit Strings in C ++ arbeiten”. eher – Methoden für die Arbeit mit Strings Klasse String-Objekte.
      Wie würden Sie diesen Artikel nennen? Vielleicht ist die Wahrheit besser umbenennen.

  3. Aber ich las einen Artikel über…

    Über strcpy habe dir etwas mitgebracht analoge Art, dh. versuchte klaffende Wunde strcpy eigenen Händen, Ich verstehe richtig?

      1. Nicht genau xD.

        Die Mähne (Standard scheint auch) Er sagt, dass die Leitungen nicht überlappen. In gcc scheint es in Ordnung überlappende Linien zu arbeiten,, aber diese Norm kann nicht definiertes Verhalten sein, und eine Einrichtung in einem anderen Compiler (eine andere Version des gleichen Compiler) es kann brechen.

        Ich denke, dass besser zu diesem Thema typische Fehler beschreiben (с strcpy – Dieser Pufferüberlauf) und Wege zur Bekämpfung von.

        Ich hatte über Kunsthandwerk gedacht melkosofta, Typ strcpy_s. Wenn Sie das Schreiben von Code in Visual Studio, dann hören Sie und Fenster stopudovo Warnung, dass, strcpy, die durch eine sichere Version ersetzt werden muss – strcpy_s. Das ist über diese Sache, die Sie IMHO schreiben.
        Schauen Sie hier

      2. Nun über strcpy_s und strcat_s – Das war meine Frage an Sie )) Es stellt sich heraus Jetzt, dass die Frage selbst.

        Interessante Sie haben eine Art der Kommunikation:
        – nur.
        – nicht genau.

        + Meine Fragen sind die gleichen, und ich frage…

        Vova. Ich schlage vor, gut zu kommunizieren, wenn wir respektieren einander )

  4. sondern eine ganze Artikel wurde Godnev, Code formatiert dest einheitlich :). Mehr Spaß ist nicht genug Beispiele, dass, wenn…

    Zeige mehr :)

      1. >> Vova. Ich schlage vor, gut zu kommunizieren, wenn wir respektieren einander )

        “Auf Sie” dass, wenn? )

        Über die korrektere Namenseinträge wissen nichts. Ich bin kein Fan von mikrostatey, Ich würde unter diesem Namen zu schreiben, und über C-Saite, eine Kette von. Ich habe mit einigen Beispiel kommen, die hätte eine Reihe von String-Funktionen gebracht, und durch die Funktionen selbst haben eine sehr kurze schriftliche (otnostrochnыe) Kommentare, Ich hätte sie an den Tisch gebracht. Posted über Pufferüberlauf – einfach eine häufiger Fehler beim Arbeiten mit Zeichenketten, Safe-Funktionen von Microsoft und ein weiteres Beispiel des Typs… “ein Array von Strings gegeben, ist es notwendig, sie in eine große Zeichenfolge zu verschmelzen” – es würde auf der Auswertung der asymptotischen Komplexität gestoppt werden – Beispiel wunderschön und Beurteilung der Komplexität liegt nicht auf der Oberfläche.

        Ich habe nicht so viel Fragen, viele vorschlagen Themen für folgende Artikel (Thesen oder Strom bis zum fertigen).

  5. Über das Beispiel der Fusion wird das Array von Strings erklären.
    ist ein Artefakt aus strcat, Hier sind Sie richtig bereits geschrieben, dass, bevor Sie beginnen zu verschmelzen, es ersetzt das Symbol . Aber zu seiner zanmenit, es ist notwendig, zu finden,. Aber wie es zu finden, Wenn die Zeichenfolge Größe nicht bekannt ist,? – laufen nacheinander alle Positionen.

    Wenn Sie fusionieren 2 Linien – die erste Länge N, zweite – M, es werden N ausgeführt + M-Operationen, tk. erste N-Operationen zu finden , M Operationen und dann den Inhalt der zweiten Reihe in der ersten Aufnahme.

    obwohl, viele Programmierer, schauen Sie nicht in die Dokumentation von Operationen erwartet M, tk. vergessen Sie die Suche.

    beziehungsweise, wenn wir eine Reihe von K-Linien haben, und so wird, dass die erste Zeile ist zu lang, und der Rest sind sehr kurze, Die Komplexität des Algorithmus ist nicht sehr klein (obwohl, weil wir eine kurze Zeichenfolge zu einem langen hinzufügen), und in der Nähe von K * nur, где Nur – die Summe der Längen aller Saiten. Kurz gesagt, anstelle der linearen quadratischen Kompliziert.

    Aber in std::alle String sehr unterschiedlich, Obwohl die Komplexität wird gleich bleiben (über, denn es gibt Dinge, wie memcpy, und der Vektor in Schüben wachsen kann) obwohl, dass die Linien von bekannter Größe. denken, warum, MB einen neuen Artikel zeichnen.

    1. Ein paar Zeilen in den Schutz des Autors!
      Vladimir, Ich appelliere an Sie “Über die korrektere Namenseinträge wissen nichts” – es gibt nichts, Fehler mit dem erfundenen Namen zu finden, und es stellt sich heraus, – gefällt mir nicht, aber ich weiß nicht, wie man am besten… “Ich würde schreiben…”, “Ich kam zu…”, ” gebracht…” und t. d. usw. Aber ich weiß nicht schreiben, nicht erfunden, nicht gebracht… (Wenn ich zu kategorisch und zutiefst falsch – Aktie, Seien Sie zu Ihrem Artikel zum gleichen Thema zu verlinken). Und jemand schrieb, Ich kam, ich habe. Und Sie sind jetzt sidiete “alle so intelligent” und kritisieren. Ich hätte viel Gutes gemacht…. Während jemand nimmt und Marken! Ich mag den Artikel und ist sehr beliebt und verständliche Beispiele. Die Präsentation viel klarer als meine derzeitige Lehrer an der Universität in C ++ (Ein weiteres Kompliment an den Autor). Vielen Dank an die gemeistert dieser Seite eher als Studien und Abstracts (aber leider). Autor, Vielen Dank für Ihre Arbeit! Stoppen Sie nicht dort, Ihre Bemühungen profitieren Menschen!

  6. das erste Beispiel des Vergleichs über 2 Zeilen habe ich nicht kompiliert ohne
    #Beispiel umfassen, aber es nicht angegeben ist.

    1. Die Beispiele in der Literatur (und viel komplexer, als gezeigt) häufig erforderlich # include keine Angabe – betrachtet, Sie werden ihre eigenen in der erforderlichen Menge eingeben.

      Insbesondere ist die, die erforderlich # include, kann variieren auf dem Betriebssystem und der Compiler in Abhängigkeit … aber nicht allen (zum Glück) MS Visual Studio mögen Sie.

    1. ob( 0 == strcmp( str1, str2 ) ) /* String-Matching * /
      sonst /* nicht überein */

      Andere Rückgabewerte (0) Mittel leksograficheskoe Bestellung Strings str1 und str2 … aber es muss vertreten, was leksografichesky trimmen.

  7. В предпоследнем примере не хватает #include . Кодеблокс послал

Hinterlasse eine Antwort

Platz Code in Tags: <pre class="lang:c ++ dekodieren:true ">DEIN CODE</Vor>