§ 9. Радковыя велічыні

9.5. Аналіз тэксту на наяўнасць розных сімвалаў

Сучасныя тэкставыя рэдактары дазваляюць атрымаць статыстыку па сімвалах і словах у дакуменце (прыклад 9.12). Пісьменны набор тэксту прадугледжвае наяўнасць аднаго прабелу паміж словамі. У такім тэксце колькасць слоў будзе большай за колькасць прабелаў на адзінку

Прыклад 9.12. Напісаць праграму, якая вызначыць колькасць слоў у тэксце, калі паміж любымі двума словамі роўна адзін прабел. Мяркуецца, што ў тэксце ёсць хоць бы адно слова.

Этапы выканання задання

I. Зыходныя даныя: радок тэксту st.

II. Вынік: колькасць слоў k.

III. Алгарытм рашэння задачы: st — string, n, k — int.

1. Уводзім зыходныя даныя. 
2. Вызначаем даўжыню радка
.
3. Пачатковае значэнне лічыльніка
 k = 1 (у тэксце ёсць хоць бы адно слова). 
4. З дапамогай цыкла
 for праглядаем кожны сімвал у радку. Калі бягучы сімвал — прабел, то павялічваем значэнне лічыльніка колькасці слоў. Вывад выніку. 

IV. Апісанне пераменных: st — string, n, k — int.

Прыклад 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).