Считать слова из входного файла, добавив лишнее слово?

Я пытаюсь подсчитать прописные и строчные буквы, количество цифр и количество слов во входном файле. Я закончил это, однако, мое количество слов отключено на один. Во входном файле 52 слова, но я считаю 53. Что бы это вызвало? Все остальные (прописные, строчные и цифры) все правильно …

Вот что у меня есть:

using namespace std;

int main()
{
fstream inFile;
fstream outFile;
string fileName("");
string destName("");
char c = 0;
///////string wrdRev("");/////////
int numCount = 0;
int capCount = 0;
int lowCount = 0;
int wordCount = 0;

cout << "Please enter file name: ";
getline(cin, fileName);
cout << endl;

inFile.open(fileName, ios::in);

if (inFile.good() != true) {
cout << "File does not exist!\n" << endl;
return 0;
}
else{
reverse(fileName.begin(), fileName.end());
destName += fileName;
}outFile.open(destName, ios::in);

if (outFile.good() == true){
cout << "File '" << destName << "' already exists!\n" << endl;
return 0;
}
else {
outFile.clear();
outFile.open(destName, ios::out);while(inFile.good() != false){
inFile.get(c);

if(isupper(c)){
capCount++;
}
else if(islower(c)){
lowCount++;
}
else if(isdigit(c)){
numCount++;
}
else if(isspace(c)){
wordCount++;
}

}
outFile << "There are " << capCount << " uppercase letters." << endl;
outFile << "There are " << lowCount << " lowercse letters." << endl;
outFile << "There are " << numCount << " numbers." << endl;
outFile << "There are " << wordCount << " words." << endl;}

inFile.close();
outFile.close();

return 0;}

Любая помощь будет оценена. Спасибо.

1

Решение

ios::good() возвращается true после прочтения последнего символа в файле. Итак, вы приходите в тело цикла еще один раз. В последний раз, когда чтение завершается неудачно, символ остается неизменным, и, поскольку он, очевидно, является пробелом, число слов увеличивается.

Вы не должны обычно использовать это good(), eof() и т. д. в качестве теста на конец ввода. Сделайте это вместо этого:

while (inFile.get(c)) {
//...
}
4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]