Streicher in C ++ und Zeichen-Arrays





строки в С++

Mit Streichern, haben wir gemeinsam mit Ihnen gearbeitet fast in jedem unserer Programm und zu dieser Lektion. Genauer gesagt mit String-Konstanten – in doppelte Anführungszeichen Zeichenfolge. Wir hatten oft bestimmte Informationen angezeigt werden. beispielsweise:

строки в С++

Text in Anführungszeichen ist eine String-Konstante. Anführungszeichen verwendet, um den Anfang und das Ende einer Zeichenkette Konstante zu bestimmen, und es ist oft nicht.

Sehr oft notwendig, nur nicht, einige kurze Nachrichten im Verlauf des Programms zu drucken,, sondern auch mit einem bestimmten Text zu arbeiten, speichern Sie es irgendwo, beziehen sich auf ihn und bearbeiten, der Notwendigkeit. K strokovoj Konstanten, oben diskutiert, Wir können nicht auf das Programm zutreffen, beispielsweise, zu überschreiben (wir wissen nicht, ihren Namen oder die Adresse im Speicher). Nun werden Sie über eine der Möglichkeiten, zu lernen mit Strings in C ++ zu arbeiten. Später werden wir mehr mit einer Art und Weise lernen – Verwendung Klasse Schnur.

So ist der erste: in C ++ zum Speichern von Strings mit Zeichen-Arrays. Dies ist die gleiche Arrays, wie wir bereits im Artikel betrachtet über Arrays in C ++, aber sie nicht speichern numerische Daten, und Charakter. Sie können die Zeichen der Anordnung in Reihe in den benachbarten Speicherzellen angeordnet vorstellen – jede Zelle speichert ein Zeichen ein Byte und. Ein Byte, weil, daß jedes Element hat eine Zeichenarray тип char. Das letzte Zeichen jeder Zeile ist ein Symbol \0 (Nullzeichen). beispielsweise:

строки в С++, символьные массивы в С++

Der Text, einschließlich Raum, Es besteht aus 11 Zeichen. Wenn die letzte Zelle ist derart, . (Punkt), stattdessen ein Null-Zeichen \0 – Der Compiler ist nicht die Linie. Und die Arbeit würde mit diesem Satz von Zeichen zu sein, wie mit einer regelmäßigen Anordnung – schreiben separat zu jeder Zelle und angezeigt Zeichen für Zeichen (mit dem Zyklus):

строки в С++, символьные массивы в С++

Glücklicherweise hat C ++ eine viel bequemer Weg, um die Zeichen-Arrays zu initialisieren und Zugriff – Reihe. Um dies zu tun, muss das letzte Zeichen des Arrays ein Null-Zeichen sein \0. Dass es eine Reihe von Zeichen ist gesetzt, Arbeit, die, viel einfacher, als mit einer Reihe von Zeichen,.

Deklariert eine Zeichenfolge so – Wir schaffen ein Array-Typ verkohlen, Größe in eckigen Klammern ist optional (berechnet er den Compiler), Betreiber = und Anführungszeichen schreiben Sie den gewünschten Text. Das heißt, wir eine Reihe von String-Konstante initialisieren:

das Null-Zeichen Vorschreiben ist nicht erforderlich,. Es ist implizit, und dies wird jedem String-Konstante automatisch hinzugefügt. Auf diese Weise, trotz der Tatsache, dass wir sehen, 11 Zeichen pro Zeile, Größe des Arrays wird 12, als \0 auch ein Symbol und belegt ein Byte von Speicher. Er wird die letzte Zelle des Zeichenfeldes nehmen. Wie Sie sehen können, für Ausgabe, genug, um es nach dem Namen zu entnehmen: cout << str << endl; cout Es wird ein Zeichen für Zeichen anzeigen, bis trifft es in einer der Zellen des Arrays newline \0 und der Ausgang wird unterbrochen. Eine solche Behandlung für einen gewöhnlichen Zeichenarray (Array ohne \0) nicht akzeptabel. Da der Compiler ausgegebenen Zeichen auf den Bildschirm geht, auch über den Umfang des Arrays, Ich bin nicht in jeder Speicherzelle Symbol erfüllt \0. Sie können versuchen, die erste Instanz zu ersetzen, statt des Zyklus Operator cout << str << endl; und sehen, was passiert,. Ich fand diese Art und Weise:

строки в С++, символьные массивы в С++

Ich möchte Ihre Aufmerksamkeit auf den Unterschied zwischen einer Zeichenkonstante zu ziehen (in einfache Anführungszeichen – 'F', '@' ) aus einem String-Konstante (in doppelte Anführungszeichen "f", "@" ). für die erste, C ++ Compiler ist ein Byte zu speichern im Speicher zugewiesen. Für ein Zeichen in doppelten Anführungszeichen geschrieben, zwei Byte Speicher zugeteilt werden – für das eigentliche Symbol für Null (vom Compiler hinzugefügt).

Was ist, wenn die Leitung wird der Benutzer über die Tastatur eingeben müssen? In diesem Fall müssen Sie erklären Feld verkohlen mit einer Angabe ihrer Größe, die ausreicht zum Speichern von Eingabezeichen, einschließlich \0. Vergessen Sie nicht, dass ein Null-Zeichen. Wenn Sie zu speichern, 3 Zeichen-Array, seine Größe sollte eine mehr als die sein, – also 4.

строки в С++, символьные массивы в С++

Mit leeren Anführungszeichen Initialisierung, wir weisen Sie einen Wert zu jedem Element des Arrays \0. So wird die Linie der gelöscht werden “Müll” andere Programme. Selbst wenn der Benutzer gibt einen Namen weniger Symbole, umfassend, den Namen finden Sie ein Symbol \0. Dadurch wird eine unnötige Fehler zu vermeiden. In Erinnerung an diese Linie würde wie folgt aussehen:

строки в С++, символьные массивы в С++

übrigens, wenn wir annehmen, die 11-te Zelle des Arrays überschreiben – str[11] = ' 0';

строки в С++, символьные массивы в С++

und eine Reihe von Bildschirm-Anzeige, wir sehen nur purecodecpp obwohl, in Zellen 12, 13, 14 wurden Symbole gespeichert. Null-Zeichen wird in bringen auf den Bildschirm eine große Rolle spielen und alle, das ist dahinter nicht gezeigt werden.

Sprechen Sie über die Saiten Tastatur-Detail setzen. Die Sache ist, dass es einige Probleme bewusst zu sein, und das muss lernen zu lösen. Das folgende Programm, wenn die Eingabe von Zeichenketten sind nicht alles so glatt, wie wir wollen:

строки в С++, символьные массивы в С++

Kümmern Sie sich nicht vorbei, dass die Eingabe durch Gin neobhodimo Latin productionodit. Darüber, wie in einem separaten Artikel beschrieben, um richtig das kyrillische Alphabet einführen werden. Hier können Sie sehen,, dass das Zitat haben wir eingeführt, aber die Ausgabe auf dem Bildschirm, wir sehen nur das erste Wort. Dies ist, dass wir nicht Null-Zeichen über die Tastatur eingeben, und Gin vermeintliche Lücke, Newline und Reiter, als das Ende der Leitung. Das heißt, in diesem Fall Gin Ich lese nur das erste Wort, ein Komma und hinzugefügt, um das Ende der Zeile automatisch markieren. Der Rest der Einträge in der Eingabewarteschlange platziert.

Wir lösen dieses Problem einfach. In C ++ gibt es eine Funktion bekommen() und getline() , wir können mit zusammen verwenden Gin. Sie sind wie, aber wird häufiger verwendet getline(). In diesem Artikel werden wir den Unterschied zwischen ihnen nicht berücksichtigen. Füllen Sie unser Programmeingabe getline ():

строки в С++, символьные массивы в С++

Sie sehen,, dass wir in Klammern für die zwei Argumente Funktion angezeigt – in dem ein Array von Zeichen betrachtet (Array-Name) und die Größe des Arrays – Reihe 11. Das Ergebnis passt zu uns – alle zeigen die korrekte. Cidargaetline() Er liest in einem Array der gesamten Linie einschließlich Leerzeichen und Tabulatoren, bis eine Depression Eingeben oder bis das Array überschritten wird. Das Newline-Zeichen in dem Array werden nicht gespeichert, und wird durch ein Null-Zeichen ersetzt.

In C ++ String-Handling, gibt es viele Funktionen, was wir im nächsten Artikel diskutieren. Darin sprechen wir über die Funktionen, die es ermöglicht Zeile zu überschreiben, vereinigen sie, miteinander verglichen, usw..

Neben dem Lesen, ist es wünschenswert, das Video-Tutorial zu sehen. Linien 7 Minuten:

Teilen Sie unsere Artikel mit Ihren Freunden in sozialen Netzwerken – dies ist der beste Dank. Und wenn Sie Fragen und Anregungen – Kommentare zu hinterlassen.

Newsletter neue Lektionen über die Programmierung:

Streicher in C ++ und Zeichen-Arrays
4.8 (96.67%) 6 Stimmen

18 Gedanken zu "Streicher in C ++ und Zeichen-Arrays

  1. Ich habe eine Frage. Wie kann ich über das Array iterieren, in ihm ein Symbol zu finden, und neben hinzufügen, um es gleich ist. Zum Beispiel gibt der Benutzer D:\myfolder und die Ausgabe sollte D sein:\\Mein Ordner\

    1. Sehen Sie das Video. Es inf, wenn Sie für eine Reihe von Autoren Definition von Array-Größe gewählt[], das ist die Funktion sizeof, mit Hilfe einer Katze kann durch alle Elemente in der sein. für ( int i = 0; ich<Größe von(Feld); i ++). das Ziel und Einsatz erreicht. Ich denke, so.

      1. Dies ist nicht wahr,:
        1. Größe von() Retouren besetzten Raum Array in Bytes, für 10 Element Array char wird es 10, und für die gleiche Anordnung wird es int 40.
        2. Die Größe des Arrays können als sizeof definiert werden( Feld ) / Größe von( Feld[ 0 ] ). Aber diese – Nur in der Felddefinition (bevor er es irgendwo funktionieren).
        3. Das Array kann nicht sein, “einfügen” Mitglied, nur möglich, wenn das Stück Druck für alle weiteren anstehenden 1 rechts, aber es ist viel zu teuer.
        4. В Zeichenfolge, Anders als Array, Sie können ein Element einfügen.

  2. guten Tag. So verstehe ich die Frage, Die Zeichenfolge muss Symbol hinzufügen. (Unterrichtsthema, weil die Leitung)

  3. warum etwas nicht funktioniert. Benennen der erste Student schreibt eine Variable, und der Name des zweiten nicht einmal betreten (springt sofort auf die Anzahl Gruppen)
    Prompt, Ich glaube nicht,)

    1. Die Sache ist, dass nach dem letzten Dateneingabefeld Stiftstruktur[ich].Ball[j] Symbol bleibt im Strom cin ' n'. Das ist es und liest die Methode getline(), ohne das Programm Suspendieren, Warten auf Eingang.
      Sie müssen cin.get hinzufügen() das letzte Team in der äußeren Schleife.

      Dmitry Belik

  4. Finden Sie das Produkt einer geraden Zahl und der Mindest, sostavlâûŝuû ein-
    Thoroe Nummer X, wie dieses Problem zu lösen?

    1. Vor allem, im Rahmen der Problemformulierung ist nicht korrekt!
      Was heißt “Komponentennummer”? In der Mathematik gibt es kein Konzept sostavlyayushey.

      Wie Sie können, beispielsweise, vorstellen, wie wie eine Lösung für einen bestimmten Wert von X aussehen sollte, lassen Sie uns sagen, X = 113? schreiben.

  5. Prompt, не пойму почему пропускается 2й запрос на ввод слов?

    в консоли выводится следующее:

    Enter some words : word
    word
    Default char is: und
    Enter new char: w
    Новый символ: w
    Thats It!!!
    2 Enter some words :
    3 Enter some words : word
    word
    Для продолжения нажмите любую клавишу . . .

  6. как значение переменной 32 разряда Превратить в строку, für, чтобы потом её разделить на 4 Byte?

    1. Как-то так (в деталях отладите сами):

Hinterlasse eine Antwort

Deine Email-Adresse wird nicht veröffentlicht. erforderliche Felder sind markiert *