Я пытаюсь подсчитать количество символов и строк в файле, используя следующую функцию.Как подсчитать символы, строки и слова в файле
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);
}
К сожалению, он будет считать только 1 строку, 1 символ и не будет классифицировать слова по размеру. Все остальные функции, которые я написал для него, работают нормально. Я пробовал множество различных вещей для счетчика персонажей, но ничего не работает. Любая помощь, которую вы могли бы предоставить, была бы весьма признательна.
Ниже я добавил функцию вывода. Я уверен, что есть лучший способ вывода из массива, но я не слишком беспокоюсь об этом прямо сейчас.
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];
}
Это открытая файловая функция, которая, я считаю, является виновником.
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;
}
}
}
проблема здесь: 'если (символ = '\ п')' и 'здесь, если (символ = EOF)', вы имели в виду 'если (символ == '\ п') 'и' if (character == EOF) ' – brunocodutra
Это не позволяет подсчитывать только один символ и строку, но теперь он никогда не выводится и, кажется, застревает в цикле while. – user2752575
Вы проверили unix использовать wc -m/w/l для справки? – lpapp