Форум программистов, компьютерный форум CyberForum.ru

Объясните работу программы (вывод строки с указанием количества вхождений слова в строку) - C++

Восстановить пароль Регистрация
 
Vanya995
0 / 0 / 0
Регистрация: 08.06.2013
Сообщений: 3
08.06.2013, 11:38     Объясните работу программы (вывод строки с указанием количества вхождений слова в строку) #1
Написать программу, которая считывает текст из файла и выводит его на экран, после каждого предложения добавляя, сколько раз встретилось в нем введенное с клавиатуры слово.

Дополн.: Создать файл word.txt и чтобы программа из него считывала текст.

C++
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
#include <iostream>
#include <fstream>
#include <string>
#include <cstdio>
 
using namespace std;
 
static const char END_OF_SENTENCE = '.';
static const char* FILE_NAME = "word.txt";
 
bool isWordDelimiter(char ch)
{
   return (ch == ' ' || ch == '.' ||
           ch == ',' || ch == ':' ||
           ch == '!');
}
 
// Функция печатает количество слов in_word в предложении in_sentence.
void printSentence(const string& in_word, const string& in_sentence)
{
   // Количество слов
   int count = 0;
   // Позиция в строке (для поиска)
   size_t str_position = 0;
   // Пока есть слово в строке
   while ((str_position = in_sentence.find(in_word, str_position)) != string::npos)
   {
      bool beginOk = false;
      bool endOk = false;
 
      if (str_position == 0)
      {
         beginOk = true;
      }
      else
      {
         beginOk = isWordDelimiter(in_sentence[str_position - 1]);
      }
 
      if ((str_position + in_word.length()) == in_sentence.length())
      {
         endOk = true;
      }
      else
      {
         endOk = isWordDelimiter(in_sentence[str_position + in_word.length()]);
      }
 
      // Увеличиваем счетчик слов.
      if (endOk && beginOk)
      {
         ++count;
      }
      // Увеличиваем позицию для поиска.
      str_position += in_word.length();
   }
   // Выводим предложение, и количество слов.
   cout << in_sentence << " " << count << endl;
}
 
int main()
{
   // Просим ввести слово.
   cout << "Enter the word, please:" << endl;
   string word;
   cin >> word;
 
   ifstream fin(FILE_NAME, ios::in);
   if (!fin)
   {
      cout << "Can't open file: " << FILE_NAME << endl;
      return 1;
   }
 
   char ch;
   string currentSentence;
   while (fin.get(ch))
   {
      if (ch != END_OF_SENTENCE)
      {
         // Если это не конец предложения, то читаем дальше.
         currentSentence.push_back(ch);
      }
      else
      {
         // Если конец предложения
         printSentence(word, currentSentence);
         currentSentence.clear();
      }
   }
   fin.close();
   
   ::system("pause");
   
   return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.06.2013, 11:38     Объясните работу программы (вывод строки с указанием количества вхождений слова в строку)
Посмотрите здесь:

C++ Подсчитать кол-во вхождений введенного с клавиатуры слова в строку
c++ Даны две строки: S1 и S2. Определить количество вхождений строки S2 в строку S1. C++
C++ Объясните работу программы
вывод числа вхождений каждого из символов первой строки во вторую строку C++
Даны две строки: S и S0. Определить количество вхождений строки S0 в строку S C++
C++ Даны строки s, s0. Найти количество вхождений строки s0 в строку s
Найти количество вхождений строки S0 в строку S C++
C++ Количество вхождений строки S2 в строку S1

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 11:09. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru