Anfängerproblem

VirusX

Grünschnabel
Hallo.

Ich bin noch ziemlich neu auf dem Gebiet der C++- Programmierung, deshalb dachte ich, wende ich mich mit meinem Problem an euch ;-).
Folgendes wurde als Aufgabe gestellt:

Schreiben Sie ein Programm, dass aus einer Textdatei die Zeilen einliest und diese
auf dem Bildschirm mit einer Umrandung zentriert ausgibt. (Dieses Programm muss
min. 2 Funktionen beinhalten.)

Beispiel für den Inhalt der Textdatei:
Dies ist ein<CR>
Beispiel<CR>
fuer eine<CR>
Textdatei<CR>

Ausgabe auf dem Bildschirm:
****************
* Dies ist ein *
* Beispiel *
* fuer eine *
* Textdatei *
****************

In der Ausgabe sollte der Text jeweils zentriert und von den * als ein Rechteck umgeben sein ;)

Das Ganze ist wahrscheinlich kein großes Werk, nur beiße ich mir daran schon seit einiger Zeit die Zähne aus. Das Einzige, was ich bisher hinbekommen habe, ist, dass ein von mir vorgegebener String auf ein Wort pro Zeile aufgeteilt wird und dann mittig samt Umrahmung ausgegeben wird. Jedoch habe ich keine Ahnung, wie ich eine solche Textdatei mit einbinden bzw. erst nach mehreren Worten pro Zeile eine Neue anfangen soll. Meine Plattform ist Visual C++ 2005.
Wäre um jede Hilfe sehr dankbar.
 
Ich habe mom. leider nicht die Zeit, das genauer auszuführen, aber ich würde das in etwa so machen:
1. komplette Textdatei in enen vector<string> einlesen (Datentyp für Datei: ifstream). Dabei die längste Zeile merken:
Code:
const int BUFSIZE = 10000;
int iMaxLineLen = 0;
char buffer[BUFSIZE];
vector<string> vecLines;
ifstream inFile(Dateiname);
if(!inFile.is_open()) return; //Fehler beim Öffnen
while(!inFile.eof())
{
  inFile.getline(buffer, BUFSIZE - 1);
  string strLine(buffer);
  if(iMaxLineLen < strLine.length()) iMaxLineLen = strLine.length();
  vecLines.push_back(strLine);
}
2. Ausgabe der 1. Zeile:
Code:
 string strTopBottomLine = string(iMaxLineLen + 4, '*');
cout << strTopBottomLine;
3. Ausgabe der Textzeilen:
Code:
vector<string>::iterator itLines = vecLines.begin();
while(itLines != vecLines.end())
{
  cout << "* " << (*itLines) << string(iMaxLineLen - (*itLines).length(), ' ') << " *" << endl;
  itLines++;
}
4. Ausgabe der Letzten Zeile:
Code:
cout << strTopBottomLine;
Das ganze ist natürlich nicht getestet und ich über nehme keine Haftung für Fehler ;-)!
Ich überlasse es Dir, das ganze in ein lauffähiges Programm zu verwandeln. Noch ein Tip: Die Headerdateien für vector und ifstream sowie den namespace std nicht vergessen.
 

Neue Beiträge

Zurück