Schnur (Informatik)

Auf formellen Sprachen, die in der mathematischen theoretischen und Logikinformatik verwendet werden, ist eine Schnur eine begrenzte Folge von Symbolen, die aus einem Satz genannt ein Alphabet gewählt werden.

In der Computerprogrammierung ist eine Schnur traditionell eine Folge von Charakteren entweder als eine wörtliche Konstante oder als eine Art Variable. Die Letzteren können seinen Elementen erlauben, verändert zu werden, und/oder die Länge geändert, oder sie kann (nach der Entwicklung) befestigt werden. Eine Schnur wird allgemein als ein Datentyp verstanden und wird häufig als ein Byte (oder Wort) Reihe durchgeführt, die eine Folge von Elementen, normalerweise Charaktere mit etwas Charakter-Verschlüsselung versorgt. Eine Schnur kann auch allgemeinere Reihe-Datentypen and/or andere folgende Datentypen und Strukturen anzeigen; Begriffe wie Byte-Schnur, oder allgemeiner, Reihe von datatype, oder Datatype-Schnur, werden manchmal gebraucht, um Schnuren anzuzeigen, in denen die versorgten Daten Text nicht (notwendigerweise) vertritt.

Abhängig von der Programmiersprache und/oder genauem verwendetem datatype kann eine Variable, die offen erklärt ist, um eine Schnur zu sein, entweder Lagerung im Gedächtnis veranlassen, für eine vorher bestimmte max Länge statisch zugeteilt zu werden, oder dynamische Verteilung verwenden, um ihm zu erlauben, chronologisch variable Zahl der Elemente zu halten.

Wenn eine Schnur wörtlich im Quellcode erscheint, ist sie als eine Schnur wörtlich bekannt und hat eine Darstellung, die es als solcher anzeigt.

Formelle Theorie

Lassen Sie Σ ein Alphabet, ein nichtleerer begrenzter Satz sein. Elemente von Σ werden Symbole oder Charaktere genannt. Eine Schnur (oder Wort) über Σ ist jede begrenzte Folge von Charakteren von Σ. Zum Beispiel, wenn Σ = {0, 1}, dann 0101 ist eine Schnur über Σ.

Die Länge einer Schnur ist die Zahl von Charakteren in der Schnur (die Länge der Folge) und kann jede natürliche Zahl sein. Die leere Schnur ist die einzigartige Schnur über Σ der Länge 0, und wird ε oder λ angezeigt.

Der Satz aller Schnuren über Σ der Länge n wird Σ angezeigt. Zum Beispiel, wenn Σ = {0, 1}, dann Σ = {00, 01, 10, 11}. Bemerken Sie dass Σ = {ε} für jedes Alphabet Σ.

Der Satz aller Schnuren über Σ jeder Länge ist der Verschluss von Kleene von Σ und wird Σ* angezeigt. In Bezug auf Σ,

:

Zum Beispiel, wenn Σ = {0, 1}, Σ* = {ε, 0, 1, 00, 01, 10, 11000, 001, 010, 011, …}. Obwohl Σ* selbst zählbar unendlich ist, haben alle Elemente von Σ* begrenzte Länge.

Eine Reihe von Schnuren über Σ (d. h. jede Teilmenge von Σ *) wird eine formelle Sprache über Σ genannt. Zum Beispiel, wenn Σ = {0, 1}, der Satz von Schnuren mit einer geraden Zahl von Nullen ({ε, 1, 00, 11, 001, 010, 100, 111, 0000, 0011, 0101, 0110, 1001, 1010, 1100, 1111, …}) eine formelle Sprache über Σ ist.

Verkettung und Teilketten

Verkettung ist eine wichtige binäre Operation auf Σ*. For irgendwelche zwei Schnuren s und t in Σ *, ihre Verkettung wird als die Folge von Charakteren in s definiert, der von der Folge von Charakteren in t gefolgt ist, und ist angezeigtes Beispiel von St. For, wenn Σ = {a, b, …, z}, s =, und t =, dann der St. = und ts =.

Schnur-Verkettung ist eine assoziative aber nichtauswechselbare Operation. Die leere Schnur dient als das Identitätselement; für jede Schnur s, εs = = s. Deshalb bildet der Satz Σ* und die Verkettungsoperation einen monoid, der freie durch Σ erzeugte monoid. Außerdem definiert die Länge-Funktion einen monoid Homomorphismus von Σ* bis die natürlichen Zahlen.

Wie man

sagt, ist eine Schnur s eine Teilkette oder Faktor von t, wenn dort bestehen (vielleicht leer), spannt u und solchen v dass t = usv. Die Beziehung "ist eine Teilkette" definiert eine teilweise Ordnung auf Σ *, dessen kleinstes Element die leere Schnur ist.

Präfixe und Nachsilben

Wie man

sagt, ist eine Schnur s ein Präfix von t, wenn dort eine Schnur u solch dass t = su besteht. Wenn u nichtleer ist, wie man sagt, ist s ein richtiges Präfix von t. Symmetrisch, wie man sagt, ist eine Schnur s eine Nachsilbe von t, wenn dort eine Schnur u solch dass t = wir besteht. Wenn u nichtleer ist, wie man sagt, ist s eine richtige Nachsilbe von t. Nachsilben und Präfixe sind Teilketten von t.

Folgen

Wie man

sagt, ist eine Schnur s = uv eine Folge von t wenn t = vu. Zum Beispiel, wenn Σ = {0, 1} die Schnur 0011001 eine Folge 0100110 ist.

Lexikografische Einrichtung

Es ist häufig nützlich, eine Einrichtung auf einer Reihe von Schnuren zu definieren. Wenn das Alphabet Σ einen Gesamtbezug hat (vgl alphabetische Reihenfolge), kann man einen Gesamtbezug auf der genannten lexikografischen Ordnung von Σ* definieren. Zum Beispiel, wenn Σ = {0, 1} und 0

</bezüglich> Folglich wird diese Darstellung allgemein C Schnur genannt. Die Länge einer Schnur kann auch ausführlich, zum Beispiel durch das Vorbefestigen der Schnur mit der Länge als ein Byte-Wert - eine in vielen Dialekten von Pascal verwendete Tagung versorgt werden; demzufolge nennen einige Menschen es eine P-Schnur. Wenn es die Schnur-Länge weil versorgt, beschränkt Byte die maximale Schnur-Länge auf 255. Um solche Beschränkungen zu vermeiden, verwenden verbesserte Durchführungen von P-Schnuren 16-, 32-, oder 64-Bit-Wörter, um die Schnur-Länge zu versorgen. Wenn das Länge-Feld den Adressraum bedeckt, werden Schnuren nur durch das verfügbare Gedächtnis beschränkt.

In begrenzten Schnuren ist der endende Code nicht ein zulässiger Charakter in jeder Schnur. Schnuren mit dem Länge-Feld haben diese Beschränkung nicht und können auch willkürliche binäre Daten versorgen. In C sind zwei Dinge erforderlich, um binäre Daten, einen Charakter-Zeigestock und die Länge der Daten zu behandeln.

Der Begriff bytestring zeigt gewöhnlich eine Mehrzweckschnur von Bytes - aber nicht Reihen von nur (lesbaren) Charakteren, Schnuren von Bit oder solchem an. Byte-Schnuren deuten häufig an, dass Bytes jeden Wert nehmen können und irgendwelche Daten versorgt werden können, weil - ist, bedeutend, dass es keinen als ein Beendigungswert interpretierten Wert geben sollte.

Hier ist ein Beispiel einer ungültig begrenzten Schnur, die in einem 10-Byte-Puffer zusammen mit seinem ASCII versorgt ist (oder modernere UTF-8) Darstellung als 8 Bit hexadecimal Zahlen:

Die Länge der Schnur im obengenannten Beispiel, "", ist 5 Charaktere, aber es besetzt 6 Bytes. Charaktere nach dem terminator bilden einen Teil der Darstellung nicht; sie können entweder ein Teil einer anderen Schnur oder gerade Müll sein. (Schnuren dieser Form werden manchmal ASCIZ-Schnuren genannt, nachdem die ursprüngliche Zusammenbau-Sprachdirektive gepflegt hat, sie zu erklären.)

Länge-vorfest

Hier ist die Entsprechung (alter Stil) Schnur von Pascal, die in einem 10-Byte-Puffer, zusammen mit seinem ASCII / UTF-8 Darstellung versorgt ist:

Gegenstand orientiert

Orientierte Sprache eines Gegenstands wird normalerweise eine Schnur wie das durchführen:

int Länge;

Rotforelle *text;

};

</Quelle>

obwohl dieser implemention verborgen, und durch Mitglied-Funktionen zugegriffen wird. Der "Text" wird ein dynamisch zugeteilter Speicherbereich sein, der wenn erforderlich ausgebreitet werden könnte. Siehe auch Schnur (C ++).

Verbundene Liste

Sowohl Charakter-Beendigung als auch Länge codieren Grenze-Schnuren: Zum Beispiel, C Charakter-Reihe, die ungültige (NUL) Charaktere enthält, kann direkt durch C-Schnur-Bibliotheksfunktionen nicht behandelt werden: Schnuren mit einem Länge-Code werden auf den maximalen Wert des Länge-Codes beschränkt.

Beide dieser Beschränkungen können durch die kluge Programmierung natürlich überwunden werden, aber solche workarounds sind definitionsgemäß nicht normal.

Raue Entsprechungen von der C Beendigungsmethode sind sowohl in der Hardware als auch in Software historisch erschienen. Zum Beispiel "haben Daten, die" Maschinen wie IBM 1401 bearbeiten, ein spezielles Wortmarke-Bit verwendet, um Schnuren am verlassenen abzugrenzen, wo die Operation am Recht anfangen würde. Das hat bedeutet, dass, während IBM 1401 ein Sieben-Bit-Wort in "der Wirklichkeit", fast keiner jemals vorgehabt hatte, das als eine Eigenschaft zu verwenden, und die Anweisung des siebenten Bit überreiten (um zum Beispiel) ASCII-Codes zu behandeln.

Es ist möglich, Datenstrukturen und Funktionen zu schaffen, die sie manipulieren, die die Probleme angenehm Beendigung nicht vereinigen lassen und im Prinzip Länge-Codegrenzen überwinden können. Es ist auch möglich, die vertretene Schnur mit Techniken von der geführten Länge-Verschlüsselung zu optimieren (wiederholte Charaktere durch den Charakter-Wert und eine Länge ersetzend), und Verschlüsselung von Hamming.

Während diese Darstellungen üblich sind, sind andere möglich. Das Verwenden von Tauen macht bestimmte Schnur-Operationen, wie Einfügungen, Auswischen und Verkettungen effizienter.

Textdateischnuren

Im Computer lesbare Textdateien, zum Beispiel Programmiersprache-Quelldateien oder Konfigurationsdateien, können Schnuren vertreten werden. Das NUL Byte wird normalerweise als terminator nicht verwendet, da das dem ASCII Textstandard nicht entspricht, und die Länge gewöhnlich nicht versorgt wird, da die Datei menschlicher editable ohne Programmfehler sein sollte.

Zwei allgemeine Darstellungen sind:

  • Umgeben durch Anführungszeichen (ASCII 22), verwendet durch die meisten Programmiersprachen. Um im Stande zu sein, Anführungszeichen, Zeilenvorschubzeichen usw. einzuschließen, sind Flucht-Folgen häufig, gewöhnlich mit dem Charakter des umgekehrten Schrägstrichs (ASCII 5C) verfügbar.
  • Begrenzt durch eine newline Folge, zum Beispiel in Windows INI Dateien.

Nichttextschnuren

Während Charakter-Schnuren sehr allgemeiner Gebrauch von Schnuren sind, kann sich eine Schnur in der Informatik allgemein auf jede Folge homogen getippter Daten beziehen. Eine Schnur von Bit oder Bytes kann zum Beispiel verwendet werden, um binäre von einem Kommunikationsmedium wiederbekommene Nichttextdaten zu vertreten. Das können Daten oder dürfen durch einen mit der Schnur spezifischen datatype, abhängig von den Bedürfnissen nach der Anwendung, dem Wunsch des Programmierers und den Fähigkeiten zur Programmiersprache nicht vertreten werden, die wird verwendet.

Schnur-Verarbeitungsalgorithmen

Es gibt viele Algorithmen, um Schnuren, jeden mit verschiedenen Umtauschen zu bearbeiten. Einige Kategorien von Algorithmen schließen ein:

Fortgeschrittene Schnur-Algorithmen verwenden häufig komplizierte Mechanismen und Datenstrukturen, unter ihnen Nachsilbe-Bäume und Zustandsmaschinen.

Charakter-Schnur hat Sprachen und Dienstprogramme orientiert

Charakter-Schnuren sind solch ein nützlicher datatype, dass mehrere Sprachen entworfen worden sind, um Schnur-Verarbeitungsanwendungen leicht zu machen zu schreiben. Beispiele schließen die folgenden Sprachen ein:

Viele UNIX Dienstprogramme führen einfache Schnur-Manipulationen durch und können verwendet werden, um einige starke Schnur-Verarbeitungsalgorithmen leicht zu programmieren. Dateien und begrenzte Ströme können als Schnuren angesehen werden.

Einige APIs wie Multimediakontrollschnittstelle, eingebetteter SQL oder printf verwenden Schnuren, um Befehle zu halten, die interpretiert werden.

Neue scripting Programmiersprachen, einschließlich Perl, Pythonschlange, Rubins und Tcl verwenden regelmäßige Ausdrücke, um Textoperationen zu erleichtern.

Einige Sprachen wie Perl und Ruby unterstützen Schnur-Interpolation, die willkürlichen Ausdrücken erlaubt, bewertet und in Schnur-Druckfehler eingeschlossen zu werden.

Charakter-Zeichenkettenfunktionen

Zeichenkettenfunktionen werden verwendet, um eine Schnur zu manipulieren oder den Inhalt einer Schnur zu ändern oder zu editieren. Sie werden auch verwendet, um Information über eine Schnur zu fragen. Sie werden gewöhnlich innerhalb des Zusammenhangs einer Computerprogrammiersprache verwendet.

Das grundlegendste Beispiel einer Zeichenkettenfunktion ist die Funktion, die die Länge einer Schnur zurückgibt (irgendwelche terminator Charaktere oder einige der inneren Strukturinformation der Schnur nicht aufzählend), und die Schnur nicht modifiziert. Zum Beispiel, Umsatz 11.

Es gibt viele Zeichenkettenfunktionen, die auf anderen Sprachen mit dem ähnlichen oder genau derselben Syntax oder den Rahmen bestehen. Zum Beispiel, auf vielen Sprachen, wird die Länge-Funktion gewöhnlich als vertreten. Wenn auch Zeichenkettenfunktionen für einen Computerprogrammierer sehr nützlich sind, sollte ein Computerprogrammierer, der diese Funktionen verwendet, aufmerksam sein, dass eine Zeichenkettenfunktion auf einer Sprache auf einer anderen Sprache gekonnt hat, sich verschieden benehmen oder einen ähnlichen oder völlig verschiedenen Funktionsnamen, Rahmen, Syntax und Ergebnisse haben.

Siehe auch

  • Verbindungsschnur
  • Tau
  • Bitstring
  • Unpassende Eingangsgültigkeitserklärung
  • Incompressible spannen
  • Leere Schnur
  • Formelle Sprache
  • Spannen Sie metrischen
  • Schnur (C ++)
  • string.h

Zeichensprache / Satanismus
Impressum & Datenschutz