text auslesen in c++

deine-mutter

Grünschnabel
ich muss ein programm schreiben mit dem ich einen text auslesen kann, sprich zeilenumbrüche zählen, grossbuchstaben zählen, zahlen zählen und auch die sonderbelegungen und die anzahl der wörter. hat da vielleicht jemand einen tip für mich?
danke für euere hilfe
 
Ja die Datei wie gewohnt mit fstream einlesen (ein Thread darüber ist grad eine Datei wo das gemacht wird) und für die anderen Aufgaben string funktionen bzw reguläre Ausdrücke benutzen mit der Anzahl an Grossbuchstaben könnteste versuchen den Text in ASCII umzuwandeln und dann gucken wieviele Elemente grösser als der Wert 64 sind (A ist 65) gibt aber sicher eine elegantere Methode mit reg. Ausdrücken :)
 
ja an den ascii code habe ich auch schon gedacht aber wie kann ich denn die Zeilenumbrüche und die einzelnen wörter zählen lassen?
und wie fange ich das ganze an? ich weiss mit fopen aber wie kann ich einen text damit öffnen dessen pfad ich mit cin eingegeben habe
 
Zuletzt bearbeitet:
Hi.

Ich würde einfach die Datei zeilenweise in einer Schleife einlesen. So kannst du schonmal in der Schleife direkt die Zeilen zählen.

Um die Großbuchstaben zu zählen würde ich einfach jedes Zeichen in der Zeile mit der Funktion isupper überprüfen. (bzw. den STL Algorithmus count_if benutzen)

Um die Wörter zu zählen wäre es am einfachsten einen istringstream zu benutzen, den mit der Zeile zu initialisieren und wortweise in einer Schleife zu zählen.

Wenn du eine Regexp Bibliothek (wie z.B. boost) installiert hast, kannst du das natürlich auch mit regulären Ausdrücken lösen.

Gruß
 
also mittlerweile zählt das programm schon nur nicht wirklich das was es soll. ich stehe noch an den anfängen von c++ und hoffe ihr könnt mir helfen. also das ist der erste teil der die kleinbuchstaben zählt. der rest baut sich ja ziemlich darauf auf. habe es jetzt auch mal ohne ascii zeichen versucht da ich keine ahnung hatte wie ich das von char in int umwandeln könnte...ich hoffe jemand kann mit mir den gegeben befehlen (oder mehr) weiterhelfen damit es richtig zählt denn entweder es kommt 0 raus oder zahl die höher ist als die ganze anzahl des textes


#include <iostream.h>
#include <conio.h>

int main()

{

char ch;

FILE *Datei;


Datei= fopen ("test.txt", "r");

fseek (Datei, 0L, SEEK_SET);




if (Datei ==NULL)
{
cout<<"geht nicht";
}
/*else
{
cout<<"hallo";
} */

/* Prüft auf Dateiende (EOF) */
if (feof(Datei))
printf("We have reached end-of-file\n");

char cBuffer[5000];
fread(cBuffer, 1, sizeof(cBuffer), Datei);
cout << cBuffer;


// char text[5000];
char auswahl;
int zaehler1=0;
int zaehler2=0;
int zaehler3=0;
int zaehler4=0;


cout <<"\n\n\n\n\Was moechten sie mit diesem Text tun?"<<endl<<endl;
cout <<"Druecken sie fuer Kleinbuchstaben zaehlen die Taste: \t\t\t<K>" <<endl;

cout <<"Druecken sie fuer Grossbuchstaben zaehlen die Taste: \t\t\t<G>"<<endl;

cout <<"Druecken sie fuer Zahlen zaehlen die Taste: \t\t\t\t<Z>"<<endl;

cout <<"Druecken sie fuer Sonderzeichen zaehlen die Taste: \t\t\t<S>"<<endl;

cout <<"Druecken sie fuer die Gesamtanzahl der Tastenberuehrungen die Taste: \t<A>"<<endl<<endl;
cin >>auswahl;


cBuffer[5000]=ch;
/* Lesen eines Zeichens aus der Datei */

// ch = fgetc(stream);



switch (auswahl)

{
case 'K':
case 'k': cout<<"Sie haben sich fuer das Zaehlen der Kleinbuchstaben entschieden"<<endl<<endl;

// for (int i=0; i<5001; i++)
// {
if (ch >='a' && ch <= 'z')
{
zaehler1 = zaehler1 +1;
}
//}
cout<<"Es befinden sich "<<zaehler1 <<" Kleinbuchstaben in dem Text.";
break;
 
Hi.

Warum benutzt du denn die C Funktionen zum Lesen der Datei? Das geht doch mit den C++ iostreams viel einfacher?!

Übrigens ist iostream.h veraltet, die C++ Header haben keine Endung.

Das folgende Programm zählt die Zeilen, Worte und Großbuchstaben in der Datei "test.txt".
Code:
#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
#include <algorithm>
#include <cctype>

using namespace std;

int main() {
  string line;
  int lines = 0, words = 0, upper_chars = 0;

  ifstream datei("test.txt");

  if (!datei.is_open()) {
    cerr << "Fehler: Datei konnte nicht geöffnet werden.\n";
    return 1;
  }

  while (getline(datei, line)) {
    lines ++;
    
    istringstream isstr (line);
    string word;
    
    while (isstr >> word) words++;
    
    upper_chars += count_if (line.begin(), line.end(), (int(*)(int))isupper);
  }
  cout << "lines: " << lines << ", words: " << words <<
    ", upper case characters: " << upper_chars << endl;
}

Gruß

PS: Benutze doch bitte die Code Tags wenn du Quelltext einfügst.
 
Zurück