Arbeiten mit lokalisierten Strings




zuerst, Sie müssen in der Lage, mit den lokalisierten Strings zu tun - ein Rekordcharakter Konstanten breite lokalisierte Zeichen und unterscheiden sie von herkömmlichen Linien verkohlen[]. Für diese Linie wird auf die Qualifier L vorherige schriftliche:

Das Ergebnis wird sein,:

achten, die Stringlänge (Anzahl Zeichen) in diesem Fall deutlich weniger, als die Anzahl Byte für die Zeichenfolge zugewiesen (Ihr Betriebssystem, kann ihre Haltung unterschiedlich sein, Ich zeige in Linux, aber es wirkt sich nicht auf die Programmiertechnik).

In einer solchen Linie in der Nähe von mit dem gleichen Erfolg können Symbole verschiedener Natur sein: verschiedene Sprachen, spezielle mathematische Symbole, gemeinsam in ihreke Bezeichnung des griechischen Alphabets (ein, e, ich, Fr., p, l, F, Oh ...), Musiknoten etc.. Wie geht es Ihnen, offensichtlich, wissen, ebenso wie ein Teil der breiten Zeichenkette, mit dem gleichen Erfolg, und kann die Zeichen des lateinischen Alphabets treffen (ASCII Haupttabelle), mit jedem solchen Symbol wird auch halten 2 oder 4 Byte (in Abhängigkeit von den im Betriebssystem angenommen Vereinbarungen), im Gegensatz zu den üblichen 1 Byte.

Wir führen eine Reihe von Operationen mit den russischen Linien, aber schreiben sie (Tschüss) in der traditionellen Form Arrays verkohlen:

ausführen:

es scheint, dass (fast) alles arbeitet genau ein Lehrbuch, und warum brauchen wir keinen umfangreichen lokalisiert Strings? Aber trügerisch Illusion! Der Punkt hier ist,, dass einige traditionelle Funktionen klein geschrieben (strcat(), strcpy(), strdup(), strstr() usw.) wird die korrekten Ergebnisse zurück. Dies liegt daran, dass sie Operationen an Bytes ausführen, Byte für Byte, ohne in die innere Struktur der Zeichen eintauchen kopieren.

Aber auch andere Operationen (und falsch Ergebnis strlen() es hat eindeutig Punkte) funktioniert nicht richtig,: strncpy(), strchr(), strsep(), strtok() usw. und sie werden Ihnen eine sehr unerwartete Ergebnisse erstellen, sehr schwer zu interpretieren. schauensie wie Bytestring umge arbeiten, und wie seine Arbeit an der englischen und russischen Linie zu unterscheiden:

Es funktioniert so, und das definitiv nicht zu, was Sie erwartet zu erhalten:

nund dies schließt unsere Diskussion über die Möglichkeit, die die russisch-sprachigen Linien des traditionellen Arrays verkohlen[] und die Verarbeitung ihrer traditionellen Funktionen in Kleinbuchstaben, und vollständige diese Prüfung Ausgang: py mit russischen Linien zu verdienen als Array verkohlen können nur:

und). oder wenn wir String-Konstanten unverändert verwenden, nur als eine Linie für ihren Input-Output unverändert;

b). oder für die Behandlung ihrer Funktionen (Bibliothek oder ihre eigene), die Sie berücksichtigen nicht die interne Struktur der Zeichen, ohne in den Binge begnügtes ist Zeit, und mit ihnen arbeiten einfach als ein bedeutungs Bytefolge.

in allen ansonsten richtigich arbeitet mit dem kyrillischen Alphabet verfügbar nur als ein breites Array von lokalisierten Zeichen wchar_t (mit Abschlussm Zeile breites Nullsymbol L‘ 0′). Arbeiten mit lokalisierten Darstellung von Zeilen von C-Bibliothek stellt breit eine Reihe von Linien-Features, ganz ähnlich wie die traditionellen Funktionen des unteren Gehäuses, aber statt des Präfix str in deren Namen mit dem Präfix wcs: Wcslen() statt strlen(), wcsncpy() statt strncpy() usw.

Mal sehen, wie es am Beispiel arbeitet der:

Diese Darstellung ist völlig ausreichend, direkte Analogien Manipulationsfunktionen mit Symbolen zu sehen wchar_t. die, wer hat einige Erfahrung mit Streichern arbeiten verkohlen mühelos verbreiten breit Strings. Einstellen der Sprache locale (Anruf setlocale()) O-Geräte (Terminal) - obligatorisch, weil das C / C ++ Programm setzt das Standardgebietsschema “C” (undzu historisch), welcher Ausgang erlaubt nur 128 Zeichen jüngere Hälfte der 8-Bit-ASCII-Zeichen.

In dem dargestellten Schrift Funktion setzt die locale, im Standard-Betriebssystem verwendet - ich vermute,, dass wir in den russisch-sprachigen experimentieren das installierte System. Die neue Sprache Standard (C99) und führt ein neues Format für die Zeichenfolge Formatierungsfunktionen (printf(), sprintf()) - %ls, Dieses Format Strings wchar_t[].

Tsowohl intern als auch, Wie bei Arrays verkohlen, konvertiert in C ++ aus C, C ++ Bibliothek stellt ein komplettes Analogon der Container-Klasse Schnur, aber in ihrer Zusammensetzung, die breiten Zeichen lokalisiert, und wird als die Klasse bekannt wstring:

Hier wird die Ausgabekette von lokalisierten Zeichen (ws) muss wird an den Ausgangsstrom wcout (ähnlich in der Bedeutung cout, aber anders als cout).

In dem dargestellten Schrift: Ort::global( Ort( “” ) ) - Diese Lokalisierungs-Einstellungen standardmäßig in C ++ OOP Weg, ähnlich, wie es gezeigt ist, bevor sie in der Art C wurde.

dasUmfragen IO breite Zeichenfolgen (an das Terminal oder in einer Datei) getrennte kompliziert Thema, daher wird Rücksicht auf eine einzelne Note zu diesem Thema aufgeschoben werden.

Newsletter neue Lektionen über die Programmierung:

Arbeiten mit lokalisierten Strings
5 (100%) 1 Abstimmung

Etwa Öl

praktische Erfahrungen über die Softwareentwicklung 40 Jahre. Lehrer Globale Logik internationales Softwareunternehmen. IBM Developer Works Permanent Autor von Publikationen. Wissenschaftliche Herausgeber der Computerliteratur-Verlag "Symbol-Plus", Sankt Petersburg.

Hinterlasse eine Antwort

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