Projekt 2: "Animierte ASCII-Kunst"
4. Filmstatistiken berechnen
Worum geht es?
Nachdem in den letzten Teilen die Filmdatei zum Lesen und deren Inhalt in einer passende Datenstruktur im Speicher abgelegt wurde, wird nun die Anzahl der Zeilen pro Bild sowie die Gesamtzahl der gespeicherten Zeichen bestimmt. Erstere ist Voraussetzung für die Höhenanpassung des Terminal-Fensters im nächsten Schritt.
Was kannst du danach?
- Eine for-Schleife benutzen
- Auf die Elemente eines verschachtelten Vektors zugreifen
Der zu öffnende Dateiname kann hier eingegeben werden:
Hinweis: Im Beispiel wurden nur die ersten 5 Bilder verwendet.
Die komplette Datei kann hier heruntergeladen werden.
#include <string> #include <iostream> #include <fstream> #include <vector> using namespace std; int main() { // Dateiname einlesen string filename; cout << "Bitte Filmdatei angeben : "; cin >> filename; cout << filename << endl; // Datei zum Lesen öffnen ifstream movie_data(filename); if (!movie_data.is_open()) { cout << "Fehler beim Öffnen!" << endl; exit(1); // Programm mit Fehlercode beenden } else { cout << "Datei erfolgreich geöffnet!" << endl; } // Datenstrukturen für Filmdaten string title; // Titel des Films string line; // eine Zeile vector<string> image; // ein Bild vector<vector<string>> images; // eine Bilderserie // Filmdaten zeilenweise auslesen while (getline(movie_data, line)) // zeilenweise auslesen { // Titel extrahieren if (line[0] == '@') // Markierung für Titel { title = line.substr(1, line.size() - 1); } // Aktuelle Zeile in Bild speichern if (line[0] == '"') // Markierung für Bilder { image.push_back(line); } // Fertiges Bild in Serie speichern if (line[0] == ' ' && image.size() > 0) { images.push_back(image); // Bild in Liste kopieren image.clear(); // Bild wieder löschen } } movie_data.close(); cout << "Filmtitel = " << title << endl; cout << "Anzahl Bilder = " << images.size() << endl; // Filmstatistiken berechnen int symbols{0}, lines{0}; for (int i = 0; i < images.size(); i++) { // Anzahl Zeilen if (images[i].size() > lines) { lines = images[i].size(); // Maximum speichern } // Anzahl Zeichen for (int j = 0; j < images[i].size(); j++) { symbols += images[i][j].size(); } } cout << "Anzahl Zeilen / Bild = " << lines << endl; cout << "Anzahl Zeichen = " << symbols << endl; return 0; }
Die Datei mit dem Namen "datei1.txt" ist auf dem Server vorhanden. Verändere den Dateinamen im Eingabefeld und achte auf die Ausgabe des Programms.