§ 9. Строковые величины

9.5. Анализ текста на наличие различных символов

Современные текстовые редакторы позволяют получить статистику по символам и словам в документе (пример 9.12). Грамотный набор текста предполагает наличие одного пробела между словами. В таком тексте количество слов будет больше количества пробелов на единицу.

Пример 9.12. Написать программу, которая определит количество слов в тексте, если между любыми двумя словами ровно один пробел. Предполагается, что в тексте есть хотя бы одно слово.

Этапы выполнения задания

I. Исходные данные: строка текста st.

II. Результат: количество слов k.

III. Алгоритм решения задачи. Описание переменных: st — string, n, k — int.

1. Вводим исходные данные.
2. 
Определяем длину строки.
3. 
Начальное значение счетчика k = 1 (в тексте есть хотя бы одно слово). 
4. 
С помощью цикла for просматриваем каждый символ в строке. Если текущий символ — пробел, то увеличиваем значение счетчика количества слов.
5. 
Вывод результата.

Пример 9.13. Написать программу, которая определит, каких знаков препинания в тексте больше: тех, которыми заканчивается предложение («.», «?», «!»), или тех, которые стоят внутри предложения («,», «:», «;»).

Этапы выполнения задания

I. Исходные данные: переменная st (текст).

II. Результат: сообщение о том, каких знаков больше.

III. Алгоритм решения задачи.

1. Ввод исходных данных.
2. 
Определим длину строки.
3. 
Создадим две вспомогательные строки. В строку z1 запишем символы «.!?» (знаки препинания «первого вида»), а в строку z2 – «,:;» (знаки препинания «второго вида»).
4. 
Инициализируем два счетчика k1 и k2 нулями (для знаков препинания «.!?» и «,:;» вида).
5. 
В цикле for проверяем каждый символ строки st.

5.1. Если встретился знак препинания «.», «!» или «?», то увеличим значение счетчика k1 на 1.
5.2. Если встретился знак препинания «,», «:», «;», то увеличим значение счетчика k2 на 1. 
5.3. Для определения, встретился ли знак препинания, будем использовать функцию find, с помощью которой будем искать текущий символ в строке со знаками препинания.

6. Сравниваем полученные значения счетчиков и выводим результат.

IV. Описание переменных: st, z1, z2 – string, n, k1, k2 – int.

 

Пример 9.12. Статистика в документе Word (соответствующая команда на вкладке Рецензирование).

V. Программа:

#include <iostream>

#include <string>

#include <windows.h>

 

using namespace std;

using namespace std::__cxx11;

 

int main()

{

  SetConsoleCP(1251);

  SetConsoleOutputCP(1251);

  string st;

  cout << "Текст" << endl;

  getline(cin, st);

  int n = st.length();

  int k = 1;

  for (int i = 0; i < n; i++)

    if (st[i] == ' ')

      k++;

  cout << "в тексте " << k;

  cout << " слов(-о,-а)" << endl;

  return 0;

}

VI. Тестирование (для проверки можно скопировать текст абзаца, из документа Word).

VII. Анализ результата. Если посмотреть статистику Word для этого абзаца, получим:

Пример 9.13.

V. Программа:

#include <iostream>

#include <string>

#include <windows.h>

 

using namespace std;

using namespace std::__cxx11;

 

int main()

{

  SetConsoleCP(1251);

  SetConsoleOutputCP(1251);

  string z1 = ".!?", z2 = ",:;";

  int k1 = 0, k2 = 0;

  string st;

  cout << "Текст" << endl;

  getline(cin, st);

  int n = st.length();

  for (int i = 0; i < n; i++){

    if (z1.find(st[i]) != -1)

       k1++;

    if (z2.find(st[i]) != -1)

       k2++;

  }

  if (k1 > k2)

    cout << "Первого вида больше" << endl;

  else

    if (k1 < k2)

     cout << "Второго вида больше" << endl;

    else

     cout << "Одинаково" << endl;

  return 0;

}

VI. Тестирование (для проверки можно скопировать текст абзаца)[1].



[1] Чехов, А. П. Человек в футляре // http://ilibrary.ru/text/438/p.1/index.html (дата доступа: 28.07.2020).