Как подсчитать количество слов в файле?
Помогите решить задачу по Яндекс.Контесту. Код я написал, он работает первые 5 тестов, однако 6 тест он не может пройти. Я использую вектор для хранения каждой линний файла, далее, использую второй вектор, который собирает слова. В конце вывожу размер второго вектора.
1 тест:
The coronavirus, or COVID-19, is inciting panic for a number of reasons. It's a new
virus, meaning no one has immunity, and there is no vaccine. Its novelty means that
scientists aren't sure yet how it behaves they have little history to go on.
Ответ: 44
2 тест:
This is the example test for my students
Ответ: 8
Вот код:
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
using namespace std;
int main()
{
ifstream myFile_Handler;
string myLine;
vector<string> v;
myFile_Handler.open("input.txt");
if (myFile_Handler.is_open())
{
// Keep reading the file
while (getline(myFile_Handler, myLine))
{
v.push_back(myLine);
}
// File Close
myFile_Handler.close();
}
else
{
return 0;
//cout << NULL << endl;
}
vector<string> vv;
string result = "";
string commas = "''";
string muns = "--";
int cnt = 0, saver = 0;
for (int i = 0; i < v.size(); i++) {
for (int j = 0; j < v[i].size(); j++) {
if ((v[i][j] >= 'A' && v[i][j] <= 'Z') ||(v[i][j] >= 'a' && v[i][j] <= 'z')|| v[i][j] == '\'' || v[i][j] == '-' || (v[i][j] >= '0' && v[i][j] <= '9')) {
//result = result + v[i][j];
saver = j;
while ((v[i][j] >= 'A' && v[i][j] <= 'Z') || (v[i][j] >= 'a' && v[i][j] <= 'z') || v[i][j] == '\'' || v[i][j] == '-' || (v[i][j] >= '0' && v[i][j] <= '9')) {
cnt++;
j++;
}
//cout << cnt << endl;
result = v[i].substr(saver, cnt);
//если в тексте встретится слово как ''' или ---, то его не пушат в вектор
if (result.find(commas) != std::string::npos || result.find(muns) != std::string::npos) {
//std::cout << "found!" << '\n';
continue;
}
else {
vv.push_back(result);
}
cnt = 0;
}
else {
result = "";
}
}
}
cout << vv.size() << endl;
return 0;
}