Работа с файлами и контейнерами С++
Входные данные задачи
Имеется ASCII файл (дамп всех wiki статьей на simple english), который рассматривается как одна строка и представлен в объекте типа std::string. Ссылка на файл.
Пример кода для загрузки файла.
#include <iostream>
#include <fstream>
int main()
{
using namespace std;
string text;
ifstream fin("engwiki_ascii.txt", ios::binary);
if(!fin.is_open())
{
cout << "not open!" << endl;
return 0;
}
text.append((istreambuf_iterator<char>(fin)), istreambuf_iterator<char>());
}
Требования к заданию
Для выполнения задания необходимо только один раз перебрать элементы текста. Например, за один цикл for
. Создавать копию текста нельзя.
for(const auto & ch : text) {
}
После этого текст необходимо удалить.
text.clear();
text.shrink_to_fit();
Варианты заданий
- Составьте частотный словарь для каждого слова. Пользователь вводит слово, вывод содержит число вхождений в текст данного слова. Под словом подразумевается последовательность, которая содержит символы [a-zA-Z] и апостроф (порядок символов не важен, как и количество). Пользователь вводит набор символов, вывод содержит все слова, содержащие эти символы.
- Составьте частотный словарь каждого ASCII символа. Пользователь вводит символ или код символа, вывод содержит число вхождений в текст данного символа.
- Составьте частотный словарь коротких предложений. Короткое предложение, это предложение содержащее не больше 10 слов. Пользователь вводит число слов, выводятся все короткие предложения указанной длины (по числу слов).
- Составьте частотный словарь для всех встречаемых чисел в тексте. Число это любой набор цифр из символов [0-9] без разрывов, включающий специальные символы, но без символа
+
илиe
(в записи экспоненциальной формы). Примеры чисел: 894, 923.21, 76876876, .32, -894, -923.21, -76876876, -0.32. Пользователь вводит число, вывод содержит число встречаемости указанного числа.