Comment calculer le nombre de caractères, de lignes et de mots dans un fichier

Je suis en train de compter le nombre de caractères et de lignes dans un fichier à l'aide de la fonction suivante.

void characterCount(ifstream& inf, string fName, int length [])
{       

    int charNum = 0;
    int lineNum = 0;

char character;

inf.get(character);
while (!inf.eof())
{
    //counts a line when an endline character is counted
    if (character = '\n')
        ++lineNum;      

    charNum++;
    inf.get(character);

    if (character = EOF)
        break;
}

inf.close();
inf.clear();

wordTabulate(inf, charNum, lineNum, length, fName);
}

void wordTabulate(ifstream& inf, int charNum, int lineNum, int count [], string fName)
{
inf.open(fName);
string word;
while (inf >> word)
{
    cout << word;
    count[word.size()]++;
}

inf.close();
inf.clear();
inf.open(fName);

output (inf, charNum, lineNum, count);
}

Malheureusement, il comptera seulement 1 ligne, 1 personnage, et de ne pas classer les mots en fonction de leur taille. Toutes les autres fonctions que j'ai écrit pour elle semblent bien fonctionner. J'ai essayé une variété de choses différentes pour le compteur de caractères, mais rien ne semble fonctionner. Toute aide que vous pouvez fournir serait grandement apprécié.

Ci-dessous, j'ai ajouté la fonction de sortie. Je suis sûr qu'il y est une meilleure façon de sortie à partir d'un tableau mais je ne suis pas trop inquiet à ce sujet maintenant.

void output(ifstream& inf, int charNum, int lineNum, int count [])
{
int words = 0;
cout << "Characters: " << charNum << endl;

words = totalWord(count);

cout << "Words: " << words << endl;

cout << "Paragraphs: " << lineNum << endl;

cout << "Analysis of Words: " << endl;

cout << "Size    1 2 3 4 5 6 7 8 9 10+" << endl;

cout << "#Words" << count [2], count [3], count [4], count [5], 
                    count [6], count [7], count [8], count [9], count [10];
}

Ici est d'ouvrir le fichier de la fonction qui, je crois, est le coupable.

bool fileOpen(string fileName, ifstream& inf, int wordTypes [])
{
int charNum = 0;
int lineNum = 0;
cout << "File? >" << endl;                  //asks for file name
cin >> fileName;                            

//opens file and indicates if file can be opened
bool Repeat ();                             
{
    inf.open(fileName.c_str());  

    if (inf.is_open())
    {
        return true;
    }

    if (!inf.is_open())
    {
        return false;
    }
} 
} 
  • le problème est ici: if (character = '\n') et ici if (character = EOF), vous signifiait if (character == '\n') et if (character == EOF)
  • Qui l'empêche de compter uniquement sur un personnage et la ligne, mais maintenant il n'a jamais sorties et semble être coincé dans la boucle while.
  • avez-vous vérifié les unix util 'wc -m/l/l' pour référence?
  • lequel des deux boucles while est-il coincé maintenant? Vous devriez vous mettre dans la majorité de l'effort ici.
  • Pourquoi êtes-vous fermeture le flux avant d'appeler wordTabulate, qui tente de lire à partir du flux? Qui semble susceptible d'être tort, mais je ne suis pas sûr. Où est le code source de "sortie"?
  • Son certainement encore coincés dans la première boucle. J'ai également ajouté la fonction de sortie pour ceux qui veulent le voir.

InformationsquelleAutor user2752575 | 2013-09-06