4 ZEICHEN UND ZEICHENKETTEN

Ähnliche Dokumente
6 ZEIGER UND REFERENZEN - ALLGEMEINES

Arrays (Felder/Vektoren)

15. Die Klasse string

Zeichenketten (1) Literale von Zeichenketten werden in doppelte Anführungszeichen gesetzt

5.1 Mehr Basistypen. (Wie viele Werte kann man mit n Bit darstellen?)

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf Seite 1 von 23

Programmiersprache 1 (C++) Prof. Dr. Stefan Enderle NTA Isny

Inhalt. Zeichen und Zeichenketten (engl. Strings)

Einstieg in die Informatik mit Java

Elementare Datentypen in C++

Programmieren in C / C++ Grundlagen C 2

Zeichenketten (Strings)

9. Vektoren. (auch Felder/array)

Einstieg in die Informatik mit Java

1. Referenzdatentypen: Felder und Strings. Referenz- vs. einfache Datentypen. Rückblick: Einfache Datentypen (1) 4711 r

1. Referenzdatentypen: Felder und Strings

Organisatorisches. Algorithmen und Datenstrukturen (für ET/IT) Programm heute. Definition Datenstruktur. Nächste Woche keine Vorlesung!

2.1 Fundamentale Typen

Einstieg in die Informatik mit Java

C++ Teil 5. Sven Groß. 13. Mai Sven Groß (IGPM, RWTH Aachen) C++ Teil Mai / 18

Einstieg in die Informatik mit Java

Einführung in die Programmierung mit C++

1. Definition. 2. Interne Speicherung der Zeichenketten. 3. Vereinbarung von Zeichenketten

Programmieren in C/C++ und MATLAB

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java

Algorithmen und Datenstrukturen

Kapitel 4. Programmierkurs. Datentypen. Arten von Datentypen. Wiederholung Kapitel 4. Birgit Engels, Anna Schulze WS 07/08

Grundlagen der Informatik 2. Typen

C/C++-Programmierung

Einstieg in die Informatik mit Java

Inhalt. 1 Einstieg in die Welt von C Erste Schritte in C 31. Vorwort... 15

Inhaltsverzeichnis. Vorwort.11

Zeiger, Arrays und Strings in C und C++

6 ZEIGERARITHMETIK - ALLGEMEINES

C++ Teil 7. Sven Groß. 3. Juni Sven Groß (IGPM, RWTH Aachen) C++ Teil 7 3. Juni / 16

Physische Datenstrukturen

Algorithmen und Datenstrukturen (für ET/IT)

Zeichenketten sind uns bisher nur als konstante Texte begegnet, welche in "" angegeben waren; z.b. als Formatstring in der printf()-funktion:

C++-Zusammenfassung. H. Schaudt. August 18, 2005

Programmierkurs C++ Variablen und Datentypen

C++ Teil 5. Sven Groß. 8. Mai IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil 5 8. Mai / 16

Praxis der Programmierung

4 Kontrollfluss-Diagramme

Einstieg in die Informatik mit Java

Informationsverarbeitung im Bauwesen

2 FUNKTIONSZEIGER UND BEHÄLTER

Programm heute. Algorithmen und Datenstrukturen (für ET/IT) Was sind primitive Datentypen? Bits und Bytes. Primitive Datentypen. Sommersemester 2014

C++ Teil 12. Sven Groß. 18. Jan Sven Groß (IGPM, RWTH Aachen) C++ Teil Jan / 11

4.2 Programmiersprache C

Grundkurs Software- Entwicklung mit C++

Vorlesungsprüfung Programmiersprache 1

Beispiel: Start. Stop

Informatik für Ingenieure

Java Einführung Objekt-Datentypen und Strings. Kapitel 8 und 9

Abschnitt 11: Beispiel: Die Klasse String (Teil 1)

Zeichendarstellung. Zeichen sind Zahlen (in C) Zeichen und switch

Projekt 3 Variablen und Operatoren

C++ Notnagel. Ziel, Inhalt. Programmieren in C++

Grundlagen der Programmiersprache C für Studierende der Naturwissenschaften

Manfred Dausmann Ulrich BröckI Dominik Schoop Joachim Goll C als erste Programmiersprache

Programmiersprachen Einführung in C

Kapitel 4: Elementare Konzepte von Programmiersprachen. Variablen Referenzen Zuweisungen

Felder - Arrays. Typ feldname[] = new Typ[<ganze Zahl >]; Beispiel: double vektor[] = new double[5]; auch eine Initialisierung ist möglich.

Peter Prinz Ulla Kirch-Prinz C+ + Lernen und professionell anwenden. ffl mitp

F Zeiger, Felder und Strukturen in C

Variablen, Konstanten und Datentypen

С als erste Programmiersprache

Informatik I (D-MAVT)

Mapra: C++ Teil 8. Felix Gruber, Michael Rom. IGPM, RWTH Aachen. 21. Juni 2016

5.4 Arrays. Oft müssen viele Werte gleichen Typs gespeichert werden. Idee: Lege sie konsekutiv ab! Greife auf einzelne Werte über ihren Index zu!

Die Programmiersprache C

Beispiele elementarer Datentypen Ganze Zahlen (integer) Unterbereiche Gleitkommazahlen Festkommazahlen

Einstieg in die Informatik mit Java

Vektoren 105. array-qualifier static restrict const volatile array-size-expression assignment-expression * simple-declarator identifier

Programmiersprachen Einführung in C

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java

Grundlagen der Programmierung in C++ Arrays und Strings, Teil 1

2. Programmierung in C

Prof. Dr. Oliver Haase Karl Martin Kern Achim Bitzer. Programmiertechnik Operatoren, Kommentare, Ein-/Ausgabe

2. Programmierung in C

Einstieg in die Informatik mit Java

1. Allgemeine Datei (Binärdatei mit formatierten Inhalt)

Programmiertechnik. Teil 4. C++ Funktionen: Prototypen Overloading Parameter. C++ Funktionen: Eigenschaften

Polymorphismus 179. Function.h. #include <string>

2.5 Primitive Datentypen

Felder. Gerd Bohlender. Einstieg in die Informatik mit Java, Vorlesung vom

Einführung in die Programmierung

Programmiertechnik Skalare Typen,Variablen, Zuweisungen

Vorkurs C++ Programmierung

Abschnitt 7: Beispiel: Die Klasse String (Teil 1)

Objektorientierte Programmierung mit C++ SS 2007

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf Seite 1 von 29

Kapitel 8: Abstrakte Datentypen. Inhalt. Definition ADT Keller ADT Schlange

Zeichenketten. Gerd Bohlender. Institut für Angewandte und Numerische Mathematik. Vorlesung: Einstieg in die Informatik mit Java. 16.

Zeichen und Zeichenketten (engl. Strings)

String s1, s2; Eine Zuweisung geschieht am einfachsten direkt durch Angabe des Strings eingeschlossen in doppelte Hochkommata:

Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung)

C Überlebenstraining

Transkript:

4 ZEICHEN UND ZEICHENKETTEN Leitideen: Jedes Zeichen aus dem Basiszeichensatz wird mittels einer kleinen ganzen Zahl (Länge 1 Byte = 8 Bit) gespeichert, die seiner Position im Zeichensatz entspricht. C-Zeichenketten sind nullterminierte C-Zeichenvektoren (d.h. letztes Zeichen enthält nur Nullbits). Dieses dient zur Längenbestimmung. Die C++-Zeichenketten aus der STL (string) verhalten sich ähnlich wie STL-Vektoren aus Zeichen, zusätzlich steht eine Reihe von Funktionen und Operatoren zur Stringverarbeitung bereit. Datentypen und Literale I,II für Zeichen C-Zeichenketten Zeichenketten in C++, Fortsetzung I-IV

Datentypen und Literale für Zeichen I Interne Darstellung von Zeichen durch ganze Zahlen. Datentyp char ist ganzzahlig (in der Regel 8 Bit-Datentyp) Implementierung von char entweder durch signed char Zahlbereich z.b. 128... 127 oder unsigned char Zahlbereich z.b. 0... 255 g++-4.7 unter Linux: char ˆ= signed char Druckbare Zeichen des Minimalzeichensatzes haben immer positive Werte. (ASCII: Druckbare Zeichen im Bereich 32... 126) Literale für Zeichen: Schreibweise mit einfachen Apostrophen, z.b. A 5 * Ersatzdarstellungen vor allem für nicht druckbare Zeichen z.b. \n \0 \10 \xa cout << A << \101 << \x41 gibt AAA aus. Ersatzdarstellungen für die Zeichen mit Sonderfunktionen \ (Apostroph), \" (Doppelapostroph), \\ (Backslash)

Datentypen und Literale für Zeichen II Caveat Zeichenkonstanten werden mit einfachen Apostrophen, Zeichenkettenkonstanten mit Doppelapostrophen geschrieben. Die Funktionen für die Zeichenverarbeitung aus cctype haben als Erbe aus C int-argumente und liefern int-rückgabewerte. (Grund: In C EOF ( End of file ) als Rückgabewert bei Dateiende und Fehlern bei einer Reihe von E/A-Funkt.) Deshalb: Bei Verwendung von toupper bzw. tolower ggf. Cast auf char erforderlich. Anmerkung 1: Es gibt lokalisierte (d.h. von der Sprachumgebung abhängige) Varianten dieser Funktionen mit den richtigen Datentypen. Anmerkung 2: Die aus C geerbten Funktionen sind zum Teil auf elementarer Ebene auch in den Klassen der STL vorhanden und tragen oft denselben Namen wie einfacher zu gebrauchende C++-Funktionen für den gleichen Zweck.

C-Zeichenketten Zeichenkettenkonstanten (Literale): "z 0... z k 1 " ˆ= { z 1,..., z k 1, \0 } Zeichenketten in C : Eindimensionale Felder, enden mit \0 (ASCII: NUL). Deshalb: In Zeichenvektoren Platz für \0 nicht vergessen! Bsp.: char a[3]="**",b[16]="zu langer String"; b: Zu langer String \0 (g++ 4.7 AMD/64) Länge der Zeichenkette mittels \0 bestimmbar. (Wird in vielen Funktionen verwendet, z.b. strlen) Caveat strlen liefert den vorzeichenlosen Ganzzahltyp size_t (oft: unsigned int). Problematisch wegen vorzeichenloser Arithmetik. C-Zeichenkettenvergleiche mittels Funktionen (strcmp) und nicht mit Vergleichsoperatoren! Zuweisungen und direkte Kopien von C-Zeichenketten nicht möglich.

Zeichenketten in C++ Allgemeines Header-Datei: string C++-Zeichenketten ( Strings ) sind nicht nullterminiert aktuelle Länge wird im Datenobjekt abgespeichert und kann dynamisch verändert werden s.size() Anzahl der Zeichen von s (kein \0 am Ende!) \0 ist ein normales Zeichen in Strings daher Vorsicht bei Umwandlung in C-Zeichenkette Diverse Konstruktoren für Strings vorhanden, insb. einer mit C-Zeichenkette als Parameter Bsp.: string s("text"); // Vereinb. okay Kein Konstruktor mit char-parameter Bsp.: string s( c ); // Vereinb. nicht erlaubt string s(1, c ); // Vereinb. okay Anmerkung: Konstruktoren ermöglichen Vereinbarungen und bewirken ggf. implizite Typumwandlungen!

Zeichenketten in C++ Fortsetzung Operatoren Komponentenzugriff wie bei Vektoren s[0] erstes Zeichen von s s[s.size()-1] letztes Zeichen von s Indextyp: string::size_type (vorzeichenlos) Zuweisungsoperator Bsp.: string s; char ct[64]; char c; s = ct; // okay ct = s; // nicht erlaubt s = c; // okay c = s; // nicht erlaubt Additionsoperator (Verkettung) Bsp.: string s,t; char cs[64],ct[64]; char c; s+t; s+ct; ct+s; s+c; c+s; // erlaubt cs+ct; // nicht erlaubt

Zeichenketten in C++ Fortsetzung II Weitere Operatoren Operator += (Anhängen) Bsp.: s+=t; s+=ct; s+=c; // okay cs+=t; c+=t; // nicht erlaubt Vergleichsoperatoren (lexikalisch) ==!= < > >= <= Bsp.: s==t s>t // okay s==ct s>ct // okay ct==s cs>t // okay cs==ct cs>ct // nicht erlaubt Substrings und C-Zeichenkettenzugriff substr liefert Substring als Temporärobjekt s.substr(i) Substring ab Index i Exception (ggf. Programmabbruch), falls i >s.size() i =s.size() zulässig (leerer Substring) c_str liefert konstante C-Zeichenkette mit \0 am Ende darf nicht modifiziert werden data liefert konstante C-Zeichenkette ohne \0 am Ende darf ebenfalls nicht modifiziert werden

Zeichenketten in C++ Fortsetzung III Suchen, Einfügen, Löschen und Ersetzen (Komponentenfunktionen) find sucht in String nach Substring oder einzelnem Zeichen Liefert Index i oder vorzeichenlose Zahl string::npos [größte vorzeichenlose Zahl (string::size_type)-1] Viele weitere Varianten: z.b. Suche erst ab angegebenem Index oder vom Ende her (rfind) allerdings keine Suchmuster (reguläre Ausdrücke) Einfüge-, Lösch- oder Ersetzungsindex i ist bei insert, erase bzw. replace das erste Argument. Exception (ggf. Programmabbruch), falls i >s.size(). Zulässig: i =s.size() copy kopiert auf C-Zeichenkette, allerdings ohne \0

Zeichenketten in C++ Fortsetzung IV Ein/Ausgabe Stringeingabe etwa mittels cin >> s viel bequemer und sicherer als in C wegen automatischer Größenanpassung (bei Platzproblemen Exception, kann abgefangen werden) getline Unterschiede: getline(stream,s) 2 unterschiedliche Ausprägungen: beide lesen von einer Zeile, schreiben auf eine Zeichenkette und entfernen \n stream.getline(cs,n) Funktion, hängt Zeile an String an und entfernt \n (bequem) Komponentenfunktion, liest höchstens n 1 Zeichen ein und schreibt sie auf C-Zeichenkette fester Länge (unbequem)