task09.md 3.18 KB
Newer Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
## Работа с файлами и контейнерами С++

### Входные данные задачи

Имеется ASCII файл (дамп всех wiki статьей на simple english), который рассматривается как одна строка и представлен в объекте типа std::string. [Ссылка на файл.](https://github.com/poluyan/saod3kEx/raw/main/engwiki_ascii.7z)

Пример кода для загрузки файла.

```cpp
#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`. Создавать копию текста нельзя. 

```cpp
for(const auto & ch : text) {
  
}
```
После этого текст необходимо удалить.
```cpp
text.clear();
text.shrink_to_fit();
```

### Варианты заданий

1. Составьте частотный словарь для каждого слова. Пользователь вводит слово, вывод содержит число вхождений в текст данного слова. Под словом подразумевается последовательность, которая содержит символы [a-zA-Z] и апостроф (порядок символов не важен, как и количество). Пользователь вводит набор символов, вывод содержит все слова, содержащие эти символы.
2. Составьте частотный словарь каждого ASCII символа. Пользователь вводит символ или код символа, вывод содержит число вхождений в текст данного символа.
3. Составьте частотный словарь коротких предложений. Короткое предложение, это предложение содержащее не больше 10 слов. Пользователь вводит число слов, выводятся все короткие предложения указанной длины (по числу слов). 
4. Составьте частотный словарь для всех встречаемых чисел в тексте. Число это любой набор цифр из символов [0-9] без разрывов, включающий специальные символы, но без символа `+` или `e`  (в записи экспоненциальной формы). Примеры чисел: 
894, 923.21, 76876876, .32, -894, -923.21, -76876876, -0.32. Пользователь вводит число, вывод содержит число встречаемости указанного числа.