Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/9: Рейтинг темы: голосов - 9, средняя оценка - 5.00
nigga44
0 / 0 / 0
Регистрация: 14.09.2014
Сообщений: 30
1

Определить количество предложений в тексте

29.09.2014, 22:16. Просмотров 1799. Ответов 3
Метки нет (Все метки)

с помощью текстового редактора создать файл, содержащий текст, длина которого
не превышает 1000 символов (длина строки текста не должна превышать 70
символов).
Имя файла должгю иметь расширение DAT.
Написать программу, которая:
• выводит текст на экран дисплея;
• по нажатию произвольной клавиши поочередно выделяет каждое предложение
текста;
• определяет количество предложений в тексте...

Ребят как сделать чтобы программа определяла количество предложений в тексте???

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
#include <stdio.h>
#include <conio.h>
#include <cstring>
using namespace std;
 
int main()
{
    setlocale(LC_ALL,"rus");
    int i;
    string bb;
    bool one = false;
    ifstream f;
    int count=1,maxcount=1;
    f.open("text.dat", ios_base::in);
    while(!f.eof())
    {
        
        getline(f,bb);
        cout<<bb<<"\n";
        
        for(i=0;i<bb.length();i++)
        {
            if(bb[i]==' ') one=true;
            if(bb[i]==' ' && bb[i+1]==' ') count++;
            else {
            if(maxcount < count) maxcount = count;
            count = 1;
                 }
           
        }
        
      
    }
      
 
    
    getch();
    return 0;
}
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.09.2014, 22:16
Ответы с готовыми решениями:

Определить количество предложений в тексте
Помогите написать программу на Visual C++ 6, условие такое: Написать программу, которая определяет...

Определить количество предложений в тексте
Добрый день! Я не могу понять в чём дело. Программа должна выводить сколько предложений в тексте, и...

Определить количество предложений в тексте
Нужно определить количество предложений в тексте, учитывая то, что пользователь неадекватный и...

Определить количество предложений в тексте
Помогите,пожалуйста,я не могу понять как написать фрагмент программы &quot;Дан текст, определить,...

3
anmartex
...
1790 / 1258 / 931
Регистрация: 12.02.2013
Сообщений: 2,058
30.09.2014, 05:46 2
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Разделителем предложений являются точка, вопросительный и восклицательный знаки. Соответственно ищите их и вперёд.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <algorithm>
#include <fstream>
#include <string>
 
int main() {
    std::ifstream f("text.dat");
 
    if (!f.is_open()) {
        return 1;
    }
 
    std::string text((std::istreambuf_iterator<char>(f)),
                      std::istreambuf_iterator<char>());
 
    std::cout << "count: "
              << count_if(text.begin(), text.end(), [](const char ch) {
                    return (std::string(";.?!").find(ch) != std::string::npos);
                 });
 
    return 0;
}
0
Ilot
Эксперт С++
1857 / 1210 / 347
Регистрация: 16.05.2013
Сообщений: 3,201
Записей в блоге: 6
Завершенные тесты: 1
30.09.2014, 10:40 3
Запилил выделение строк.
Кликните здесь для просмотра всего текста
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
#include <iostream>
#include <algorithm>
#include <fstream>
#include <string>
#include <cstdlib>
#include <windows.h>
int main() {
    system("chcp 1251>0");
    std::ifstream file("C:\\text.dat");
    if (!file.is_open()) {
        std::cerr << "Cannot open file.\n";
        return EXIT_FAILURE;
    }
    std::string text((std::istreambuf_iterator<char>(file)),
                      std::istreambuf_iterator<char>());
    std::cout << text <<std::endl;
 
    HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
    WORD wAttribute, wAttributeOld;
    DWORD dwWritten;
    DWORD dwLength;
    COORD CoordCurrent, CoordRead, CoordLast, CoordMax;
    CONSOLE_SCREEN_BUFFER_INFO csbi;
    GetConsoleScreenBufferInfo(hStdOut, &csbi);
 
    wAttributeOld = csbi.wAttributes;
    wAttribute = BACKGROUND_INTENSITY;
 
    CoordCurrent.X = CoordCurrent.Y = 0;
    CoordLast = CoordRead = CoordCurrent;
 
    CoordMax = csbi.dwCursorPosition;
 
    TCHAR ch;
    DWORD nCountReadCharacter;
 
    do {
        dwLength = CoordRead.X - CoordCurrent.X + (CoordRead.Y - CoordCurrent.Y) * 80;
        FillConsoleOutputAttribute(hStdOut, wAttribute, dwLength, CoordCurrent, &dwWritten);
 
        dwLength = CoordCurrent.X - CoordLast.X + (CoordCurrent.Y - CoordLast.Y) * 80;
        FillConsoleOutputAttribute(hStdOut, wAttributeOld, dwLength, CoordLast, &dwWritten);
 
        CoordLast = CoordCurrent;
        CoordCurrent = CoordRead;
 
        do {
            ReadConsoleOutputCharacter(hStdOut, &ch, 1, CoordRead, &nCountReadCharacter);
            CoordRead.X += 1;
            if (CoordRead.X == 80) {
                CoordRead.Y += 1;
                CoordRead.X = 0;
            }
            if(ch == '.' || ch == '?' || ch == '!')
                break;
        } while((CoordRead.Y < CoordMax.Y) || (CoordRead.X < CoordMax.X));
        system("pause");
    } while((CoordRead.Y < CoordMax.Y) || (CoordRead.X < CoordMax.X));
 
    return 0;
}
0
Mr.X
Эксперт С++
3197 / 1724 / 435
Регистрация: 03.05.2010
Сообщений: 3,867
30.09.2014, 15:44 4
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Цитата Сообщение от anmartex Посмотреть сообщение
Разделителем предложений являются точка, вопросительный и восклицательный знаки. Соответственно ищите их и вперёд.
Ну, во-первых точка с запятой не означает конец предложения.
А во-вторых тест для вашей программы. Как она считает, сколько здесь предложений?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
!!!ааааааааааааа.ааааааааааааа... аааааааааааааааа..ааааааааааааааааа.
бббббббббббб!бббббббббббббб!   ббббббббббббббббб!!бббббббббббббббб..
ввввввввввввв,ввввввввввввв?   ввввввввввввввв?вввввввввввввввввв...
гггггггггггг???гггггггггггггг.гггггггггггггггг?!ггггггггггггггггг!
ддддддддддддд..ддддддддддддд. ддддддддддддддддд..дддддддддддддддд!!
еееееееееее . еееееееееее .   ееееееееееееееее    ..  
еееееееееееееееееееее!!!
жжжжжжжжжжжжжжжжжжжжжжжжжжж  жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж?!
ззззззззззззззззззззззззззззз
зззззззззззззззззззззззззззззз?!!
иииииииииии
иииииииииии
иииииииииииииииииии
ииииииииииииииииии??!!
Мой вариант:
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
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
/////////////////////////////////////////////////////////////////////////////////////////
//С помощью текстового редактора создать файл, содержащий текст, длина которого
//не превышает 1000 символов (длина строки текста не должна превышать 70
//символов).
//Имя файла должгю иметь расширение DAT.
//Написать программу, которая:
//• выводит текст на экран дисплея;
//• по нажатию произвольной клавиши поочередно выделяет каждое предложение
//текста;
//• определяет количество предложений в тексте...
/////////////////////////////////////////////////////////////////////////////////////////
#include <algorithm>
#include <cctype>
#include <conio.h>
#include <fstream>
#include <iostream>
#include <iterator>
#include <locale>
#include <sstream>
#include <string>
/////////////////////////////////////////////////////////////////////////////////////////
typedef std::string         T_str;
typedef T_str::size_type    T_pos;
/////////////////////////////////////////////////////////////////////////////////////////
bool    successfully_for_text_sentence_positions_set_next_sentence_positions
    (
        T_str   const   &   text,
        T_pos           &   cur_begin_pos,
        T_pos           &   cur_end_pos
    )
{
    static  const   T_str   END_SYMBOLS     =   ".!?";
 
    auto    it  =   std::adjacent_find
                        (
                            text.begin  ()  +   cur_end_pos,
                            text.end    (),
 
                            []  (
                                    char    L,
                                    char    R
                                )
                            {
                                return      END_SYMBOLS.find( L ) ==  T_str::npos
                                        &&  END_SYMBOLS.find( R ) !=  T_str::npos;
                            }
                        );
 
    bool    bool_res    =   it  !=  text.end();
 
    if( bool_res )
    {
        cur_begin_pos   =   cur_end_pos;
 
        cur_end_pos     =       std::distance
                                    (
                                        text.begin(),
                                        it
                                    )
                            +   1;
 
        while   (
                    END_SYMBOLS.find( cur_end_pos ) !=  T_str::npos
                )
        {
            ++cur_end_pos;
        }
    }//if
 
    return  bool_res;
}
/////////////////////////////////////////////////////////////////////////////////////////
bool    successfully_find_and_select_next_sentence_in_text( T_str  const   &   text )
{
    static  T_pos   cur_begin_pos   =   0;
    static  T_pos   cur_end_pos     =   0;
    //
 
    bool    bool_res    =   successfully_for_text_sentence_positions_set_next_sentence_positions
                                (
                                    text,
                                    cur_begin_pos,
                                    cur_end_pos
                                );
 
    if( bool_res )
    {
        T_str   temp_text   =   text;
 
        std::transform
            (
                temp_text.begin     ()   +   cur_begin_pos,
                temp_text.begin     ()   +   cur_end_pos,
                temp_text.begin     ()   +   cur_begin_pos,
 
                []  ( char  c )
                {
                    return  toupper
                                (
                                    c,
                                    std::locale("")
                                );
                }
            );
 
        system("cls");
        std::cout   <<  temp_text;
    }//if
 
    return  bool_res;
}
/////////////////////////////////////////////////////////////////////////////////////////
int     get_sentences_count_in_text( T_str  const   &   text )
{
    static  T_pos   cur_begin_pos   =   0;
    static  T_pos   cur_end_pos     =   0;
 
    int     sentences_counter       =   0;
 
    while   (
                successfully_for_text_sentence_positions_set_next_sentence_positions
                    (
                        text,
                        cur_begin_pos,
                        cur_end_pos
                    )
            )
    {
        ++sentences_counter;
    }
 
    return  sentences_counter;
}
/////////////////////////////////////////////////////////////////////////////////////////
int     main()
{
    std::locale::global(std::locale(""));
    const   T_str   FILE_NAME   =   "t.txt";
    const   char    SPACE_SYMB  =   ' ';
    std::ifstream   ifile( FILE_NAME );
 
    if( !ifile )
    {
        std::cout   <<  "Файл не найден."
                    <<  std::endl;
    }
 
    std::stringstream  ostr;
    ostr    <<  ifile.rdbuf();
 
    T_str   text    =   ostr.str()  +   SPACE_SYMB;
 
    std::cout   <<  text
                <<  std::endl
                <<  std::endl
                <<  std::endl
                <<  std::endl
                <<  "Для выделения предложений последовательно нажимайте пробел."
                <<  std::endl;
 
    do
    {
        getch();
    }
    while   (
                successfully_find_and_select_next_sentence_in_text( text )
            );
 
    std::cout   <<  std::endl
                <<  std::endl
                <<  std::endl
                <<  std::endl
                <<  "В тексте содержится "
                <<  get_sentences_count_in_text( text )
                <<  " предложений."
                <<  std::endl;
 
    system("pause");
}
0
30.09.2014, 15:44
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.09.2014, 15:44

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Как определить количество предложений в тексте?
Ребят как определяет количество предложений в тексте??? с помощью текстового редактора создать...

Определить количество повествовательных предложений в тексте
Определить количество повествовательных предложений в тексте; по нажатию произвольной клавиши...

Слова на букву "А" в тексте переписать в обратном порядке, определить количество предложений в тексте
Как решить задачу на с++? В тексте все слова, начинающиеся на букву 'A', переписать в обратном...

Подсчитать количество предложений в тексте
Добрый вечер нужно подсчитать количество предложений в тексте, чет пока не могу собразить как....


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.