C++ Kurs

Wenn fertig, bitte Fenster schließen

Lösung zur Lektion "string Datentyp"


// Lösung zur string Klasse

// Dateien einbinden

#include <iostream>
#include <fstream>
#include <string>
#include <cstdlib>
#include <cctype>

using std::cout;
using std::endl;

// Ein- und Ausgabedatei
const char* const pIFILE = "gcc.mak";
const char* const pOFILE = "conv.mak";

// main() Funktion
int main()
{
   // string Objekt in dem der gesamte von Kommentaren und Leerzeilen
   // befreite Dateiinhalt von pIFILE abgelegt wird

   std::string resString;

   // Eingabedatei öffnen
   std::ifstream inFile(pIFILE);
   if (!inFile)
   {
      cout << "Fehler beim Öffnen der Datei " << pIFILE << endl;
      exit(1);
   }

   // Datei komplett durchlaufen
   do
   {
      // string Objekt für einzelne Zeile aus der Datei
      std::string line;
      // Komplette Zeile einlesen
      std::getline(inFile,line);
      // Falls noch nicht Dateiende erreicht
      if (!inFile.eof())
      {
         // Wenn Zeile nicht Kommentarzeile und nicht Leerzeile
         if ((line[0] != '#') && (line.size() != 0))
         {
            // Zeile zum neuen Dateiinhalt hinzufügen
            resString += line;
            // Zeilenvorschub nicht vergessen!
            resString += '\n';
         }
      }
   } while (!inFile.eof());
   // Eingabedatei schliessen
   inFile.close();

   // Jetzt alles in Grossbuchstaben wandeln
   // Die Umwandlung wäre mit Hilfe von Iteratoren eleganter, diese werden
   // aber erst später eingeführt

   for (unsigned int index=0; index<resString.size(); index++)
      resString[index] = std::toupper(resString[index]);

   // Ausgabedatei öffnen
   std::ofstream outFile(pOFILE);
   if (!outFile)
   {
      cout << "Fehler beim Öffnen der Datei " << pOFILE << endl;
      exit(1);
   }
   // Neuen Dateiinhalt in Datei übertragen
   outFile << resString;
   // Ausgabedatei schliessen
   outFile.close();
}