6 UTF8 und Stringverarbeitung

Ähnliche Dokumente
13 Reguläre Ausdrücke

4 Schleifen und Dateien

Übung HP Musterlösung zu Aufgabe 9:

Quiz und Übungen. C++ Übung am 19. Mai 2016

Hochschule Darmstadt Informatik-Praktikum (INF 1) WS 2014/2015 Wirtschaftsingenieur Bachelor 4. Aufgabe Datenstruktur, Dateieingabe und -ausgabe

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

Programmieren in C/C++ und MATLAB

Hochschule Darmstadt Informatik-Praktikum (INF 1) WS 2015/2016 Wirtschaftsingenieur Bachelor 5. Aufgabe Datenstruktur, Dateieingabe und -ausgabe

Ein- und Ausgabe in Dateien (File I/O)

Vererbung I. Kfz Eigenschaften und Methoden der Klasse Kfz Lkw. Pkw. Eigenschaften und Methoden der Klasse Kfz

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

In C++ kann man fünf Teilsprachen, die bezüglich Syntax und Semantik differieren, unterscheiden. Objektorientierte Erweiterungen von C

Übung HP Beispielaufgaben 3

Python für Linguisten

Klausur: Grundlagen der Informatik I, am 05. Februar 2008 Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.: Punkte:

Musterlösung zur Übung 5

C++ - Einführung in die Programmiersprache Ein- und Ausgabe in die Konsole. Leibniz Universität IT Services Anja Aue

Übungen zur Vorlesung EidP (WS 2015/16) Blatt 6

Lösungsvorschlag 3. Übung Technische Grundlagen der Informatik II Sommersemester 2009

Hochschule Darmstadt Informatik-Praktikum WS 2017/2018 WIng Bachelor 6. Aufgabenblatt Zeiger, verkettete Liste, Dateieingabe und -ausgabe

Ein- und Ausgabe (I/O)

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

EiP Übung

C++ Teil Schleifen. Man kann bestimme Anweisungen in einem Programm mehrfach ausführen lassen. Dazu gibt es in C++ verschiedene Schleifen.

Excel + VBA. Ergänzungen. Kapitel 1 Einführung in VBA Sequentielle Textdateien HARALD NAHRSTEDT. Erstellt am

Hochschule Darmstadt Informatik-Praktikum SS 2017 EIT Bachelor 5. Aufgabenblatt Datenstruktur, Dateieingabe und -ausgabe

Angewandte Mathematik und Programmierung

KLAUSUR ZUM BACHELORMODUL EINFÜHRUNG IN DIE PROGRAMMIERUNG WS 2013/14, DR. MAXIMILIAN HADERSBECK KLAUSUR AM

Kontrollstrukturen -- Schleifen und Wiederholungen

Lesen und Schreiben von Dateien

einlesen n > 0? Ausgabe Negative Zahl

Lösungen Übung 5. Programmieren in C++ 1. Aufgabe. #include <iostream.h> #include <stdarg.h>

7. Einführung in C++ Programmieren / Algorithmen und Datenstrukturen 1 Prof. Dr. Bernhard Humm FB Informatik, Hochschule Darmstadt

Ein- und Ausgabe mit Dateien

Implementation VL3 Gruppe A

Programmier-Befehle - Woche 10

Grundlagen der Informatik 6. Arrays I

Klausur Programmieren 1 SS 2017

Übung HP Angabe: #include <iostream> #include <vector> #include <locale>

DAP2 Praktikum Blatt 1

Grundlagen der Informatik 2. Typen

System.out.println("TEXT");

GridView Daten-Import aus einer csv-datei GridView Daten-Import aus einer csv-datei

Mapra: C++ Teil 7. Felix Gruber, Michael Rom. 14. Juni 2016 IGPM. Felix Gruber, Michael Rom (IGPM) Mapra: C++ Teil 7 14.

FB Informatik. Fehler. Testplan

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

Übersicht PERL. !!!! Wichtig: Nach dem Befehl einem Strichpunkt setzen!!!!

Einführung in den Einsatz von Objekt-Orientierung mit C++ I

Ein- und Ausgabe mit Dateien

Microcontroller / C-Programmierung Selbststudium Semesterwoche 1

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

Schreiben Sie ein Programm, welches folgende Bestandteile besitzt. Verwenden Sie diese Elemente geeignet, um eine Sortierung des Feldes zu erzielen!

DAP2-Programmierpraktikum Einführung in C++ (Teil 1)

GI Vektoren

Hydroinformatik I: IO - Files

Programmierkurs Python I

Themen. Formatierte und unformatierte Eingabe Bedingungsoperator Namespaces Kommandozeilenargumente

Musterlösung Klausur 13/

Einführung in die Programmierung Wintersemester 2011/12

boolean ispalindrome = word.equalsignorecase(reverse.tostring());

Einführung in die Programmierung für Computerlinguisten

Kapitel 1 Pythons Sicht der Dinge

javascript Coding-Guidelines 2. Ausgabe Februar 2015 Der Guideline beschreibt den verwendeten Coding-Stil von javascript als eigene Richtline.

Es ist für die Lösung der Programmieraufgabe nicht nötig, den mathematischen Hintergrund zu verstehen, es kann aber beim Verständnis helfen.

Informatik Grundlagen, WS04, Seminar 13

Informatik I. Übung 2 : Programmieren in Eclipse. 5. März Daniel Hentzen

Kurze Einführung in die Programmiersprache C++ und in Root

Hydroinformatik I: Hello World

C++ Teil 2. Sven Groß. 16. Apr IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Apr / 22

Lösungen der P1-Musterprüfungsaufgaben

Grundlagen der Objektorientierten Programmierung - IO-Tools

Einführung in I/O und File-Handling in C ++

Tutoraufgabe 1 (Zweierkomplement): Lösung: Programmierung WS16/17 Lösung - Übung 2

JavaScript. Dies ist normales HTML. Hallo Welt! Dies ist JavaScript. Wieder normales HTML.

Von C zu C++ Karl Gmeiner

Einheit Datentypen in der Programmiersprache C Schwerpunkt: Elementare (arithmetische) Datentypen

E-/A-Funktionalität nicht Teil der Programmiersprache

KLAUSUR ZUM BACHELORMODUL EINFÜHRUNG IN DIE PROGRAMMIERUNG WS 2016/17, DR. MAXIMILIAN HADERSBECK KLAUSUR AM

Programmieren in C/C++ und MATLAB

Hydroinformatik I: Strings

Autor: Michael Spahn Version: 1.0 1/10 Vertraulichkeit: öffentlich Status: Final Metaways Infosystems GmbH

Informatik I Übung, Woche 40

Einstieg in die Informatik mit Java

JAVA BASICS. 2. Primitive Datentypen. 1. Warum Java? a) Boolean (logische Werte wahr & falsch)

Klausur: Grundlagen der Informatik I, am 05. Februar 2008 Dirk Seeber, h_da, Fb Informatik

HS Ravensburg-Weingarten Schriftlich Prüfung Programmieren

Übung zur Vorlesung Wissenschaftliches Rechnen Sommersemester 2012 Auffrischung zur Programmierung in C++, 1. Teil

Klausur: Grundlagen der Informatik I, am 05. Februar 2008 Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.: Punkte:

Buch-Add-Ons. Jürgen Bayer. Object Pascal-Tipps und Tricks. 1 Konvertieren und auf numerische Werte überprüfen 2

FH Ravensburg-Weingarten Schriftlich Prüfung Programmieren

Einführung in QtiPlot

Einführung in die Programmierung WS 2009/10. Übungsblatt 7: Imperative Programmierung, Parameterübergabe

Algorithmen und Datenstrukturen

Klausur Informatik WS 2012/13

Programmieren in Python

Die elementare Ausgabe von Daten auf externe Medien, wie Dateien und das Einlesen davon wird demonstriert.

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

Inhalt Streams Eingabe / Ausgbe in C Dateizugriff in C Eingabe / Ausgabe in C++ Dateizugriff in C++ Error Handling

Informatik für Elektrotechnik und Informationstechnik

Transkript:

6 UTF8 und Stringverarbeitung 6.1 Übungsaufgabe 6.1.1 Aufgabe 1 Verwenden Sie die Musterlösung aus Übung 3-2 und machen Sie das Programm unicodefähig. Arbeiten Sie mit wcin, wcout, wstrings, iswpunct, locale, etc. 6.1.2 Aufgabe2 Verwenden Sie den folgenden Text: http://www.zeno.org/literatur/m/dostoevskij, +F%C3%ABdor+Michajlovi%C4%8D/Romane/Der+Idiot Verwenden Sie Ihre Lösung aus Aufgabe 1, um jede Zeile der Datei der_idiot_100.txt zu lesen, auszugeben und in der nächsten Zeile die Positionen aller Punktiationszeichen dieser Zeile anzuzeigen. z.b. Morgen, tobte der Mann, ist endgültig klar, ob Bayern weiterkommt! ^ ^ ^ ^ 6.1.3 Aufgabe 3 Schreiben Sie ein C++ Programm, welches statistische Angaben des Textfiles der_idiot_ 100.txt (UTF8) ermittelt. Geben Sie die Anzahl der Zeilen, Wörter und Buchstaben aus. 6.2 Wiederholung und zusätzliche Informationen 6.2.1 Isolatin Dateien in Eclipse importieren Neue File erstellen und entsprechend benennen z.b. "der_idiot_100.txt" Text Copy und Pasten, aber dabei beachten dass der korrekte Text (mit sichtbaren Umlauten) kopiert wird Codierung der File korrekt einstellen über Rechtsklick - Properties - TextfileEncoding - Für Isolatin Datei auf ISO-8859-1 stellen 24

6.3 Lösungsvorschlag 25 Wenn die Umlaute in der Eclipse Datei wieder zerstört sind, ist die Datei richtig auf Isolatin kodiert 6.2.2 UTF8 und C++ Um Unicode-Zeichen mit C++ verarbeiten zu können, wurden neue Datentypen eingeführt. wstring ist der äquivalente Unicode-Datentyp für strings, wchar_t ist der äquivalente Unicode-Datentyp für wchar_ts. Aus den normalen Strings/Characters wird durch das Voranstellen von L ein Widestring/ Widecharacter. Ebenso gibt es für die meisten Funktionen äquivalente Widestring/Widecharacter-Funktionen, z.b. cin wird zu wcin. Da es nicht sinnvoll ist, normale Funktionen und Widestring/Widecharacter-Funktionen zu mischen, kann es in Programmen zu Problemen kommen, bei denen Dateinamen vom User eingegeben werden können. Dateinamen werden dem wifstream als Cstring übergeben. Wstrings können aber nur über einen kleinen Umweg in Cstrings konvertiert werden: // Dateiname wird als wstring eingelesen wstring filename ; wcout << " Bitte geben Sie den Dateinamen ein : " << endl ; getline ( wcin, filename ); // Dateiname wird von wstring in string konvertiert string filenamestring ( filename. begin (), filename. end ()); // Datei kann nun normal mit der c_str () Methode für Strings geöffnet werden wifstream datei ( filenamestring. c_str ()); datei. imbue ( locale (" de_de.utf -8")); 6.3 Lösungsvorschlag 6.3.1 Aufgabe 1 * Uebung 5, Aufgabe 1 * Programm : Zeigt Punktuationszeichen an - UNICODE - Version // Kodierung wird auf utf8 gesetzt std :: locale utf8locale (" de_de. UTF -8"); std :: wstring zeile ;

26 6 UTF8 und Stringverarbeitung // Textzeile einlesen std :: wcout << L" Geben Sie eine Textzeile ein > >"; getline ( std :: wcin, zeile ); // Gibt die unbearbeitete Zeile aus std :: wcout << zeile << std :: endl ; int count_punct = 0; for ( int i = 0; i < zeile. size (); i ++) { // Wenn es ein Punktuationszeichen ist soll die Position markiert werden if ( iswpunct ( zeile.at(i ))) { std :: wcout << "^"; count_punct ++; // Wenn es kein Punktuationszeichen ist soll es eine Stelle weiter rücken else { std :: wcout << " "; std :: wcout << std :: endl ; // Wenn es gar kein Punktuationszeichen gab if (! count_punct ) { std :: wcout << L" Kein Punktuationszeichen in dieser Zeile gefunden!" << std :: endl ; 6.3.2 Aufgabe 2 * Uebung 5, Aufgabe 2 * Programm : Zeigt Punktuationszeichen in Datei an - UNICODE - Version // Kodierung wird auf utf8 gesetzt std :: locale utf8locale (" de_de. UTF -8"); std :: wstring zeile ; // Datei wird geöffnet und korrekt kodiert std :: string filename = " der_idiot_100. txt "; std :: wifstream input ; input. open ( filename.c_str ()); input. imbue ( utf8locale );

6.3 Lösungsvorschlag 27 while ( getline ( input, zeile )) { // Gibt die unbearbeitete Zeile aus std :: wcout << zeile << std :: endl ; // Loesung mit Bool statt int bool count_punct = false ; for ( int i = 0; i < zeile. size (); i ++) { // Wenn es ein Punktuationszeichen ist soll die Position markiert werden if ( iswpunct ( zeile.at(i ))) { std :: wcout << "^"; count_punct = true ; // Wenn es kein Punktuationszeichen ist soll es eine Stelle weiter rücken else { std :: wcout << " "; std :: wcout << std :: endl ; // Wenn es gar kein Punktuationszeichen gab if (! count_punct ) { std :: wcout << L" Kein Punktuationszeichen in dieser Zeile gefunden!" << std :: endl ; 6.3.3 Aufgabe 3 * Uebung 5, Aufgabe 3 * Programm : Statistik von Dateien ( Unicode Version ) # include < locale > # include < sstream > std :: wstring line ; std :: wifstream datei (" der_idiot_100. txt "); datei. imbue ( std :: locale (" de_de.utf -8")); // Zaehlvariablen werden deklariert und initialisiert int countlines = 0;

28 6 UTF8 und Stringverarbeitung int countwords = 0; int countletters = 0; while ( getline ( datei, line )) { // zaehlt Zeilen countlines ++; // zaehlt Buchstaben for ( int i = 0; i < line. size (); i ++) { if (! std :: iswspace ( line.at(i ))) { if (! std :: iswpunct ( line.at(i ))) { countletters ++; // zaehlt Woerter ( Version mit Stringstream ) std :: wstring word ; std :: wstringstream wordsofline ; wordsofline << line ; while ( wordsofline >> word ) { countwords ++; datei. close (); // Ergebnisse werden ausgegeben std :: wcout << L" Im Text gibt es " << std :: endl ; std :: wcout << countlines << L" Zeilen, " << std :: endl ; std :: wcout << countwords << L" Wörter und " << std :: endl ; std :: wcout << countletters << L" Buchstaben." << std :: endl ;