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

Вывести предложения, не содержащие запятых - C++

Восстановить пароль Регистрация
 
Nastusha1822
0 / 0 / 0
Регистрация: 11.12.2013
Сообщений: 27
11.07.2014, 11:24     Вывести предложения, не содержащие запятых #1
Файлы

Помогите, пожалуйста. Надо написать программу, которая считывает текст из файла и выводит на экран только предложения, не содержащие запятых.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.07.2014, 11:24     Вывести предложения, не содержащие запятых
Посмотрите здесь:

Из текстового файла неизвестного размера вывести на экран все предложения, не содержащие запятых C++
C++ Считать текст из файла и вывести на экран только предложения, не содержащие запятых
C++ Написать программу, которая считывает текст из файла и выводит на экран только предложения, не содержащие запятых.
C++ Вывод на экран только предложения, не содержащие запятых.
Нужна программа, которая считывает текст из файла и выводит на экран только предложения, не содержащие запятых C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Roodey
4 / 4 / 1
Регистрация: 23.05.2013
Сообщений: 36
11.07.2014, 11:46     Вывести предложения, не содержащие запятых #2
Собственно:
-Считываем из файла в строку(в string, например, но можно в массив char запихнуть), каждое предложение в новую строку
-Выводим на экран изначальное сообщение - для проверки корректности считывания
Тут возникает вопрос: Что программа должна вывести на экран?
1) Выбрать из всех предложений те, что не содержат символа ","?
2) Убрать из всех предложений "," и вывести их на экран?

В (1) случае: пробегаем по строкам, ищем в них "," , если такой символ находится, переходим к следующей строке
Во (2) случае: пробегаем по строкам, ищем в них "," , когда находим "," удаляем или заменяем на " "(пробел), на ваше усмотрение
-Выводим на экран

Алгоритм прост, ну, в моем понимании, правда я не уверен, что выразил и расписал понятно для вас.
Так что вопрос в том, в чему вас загвоздка?
John Prick
754 / 687 / 123
Регистрация: 27.07.2012
Сообщений: 1,974
Завершенные тесты: 3
11.07.2014, 11:58     Вывести предложения, не содержащие запятых #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
/*
Написать программу, которая считывает текст из файла
и выводит на экран только предложения, не содержащие запятых.
*/
 
#include <stdlib.h>
#include <iostream>
#include <fstream>
#include <string>
#include <algorithm>
#include <iterator>
 
int main(void)
{
    setlocale(0, "rus");
 
    std::ifstream input("input.txt");
    if (!input.is_open())
    {
        std::cout << "Не удалось открыть файл input.txt" << std::endl;
        system("pause");
        return 0;
    }
 
    while (!input.eof())
    {
        bool end_sentence;
        std::string word;
        std::string sentence;
        do {
            input >> word;
            end_sentence = word.empty() || (word[word.size() - 1] == '.');
            sentence += (word + " ");
        } while (!end_sentence);
 
        bool was_comma = (std::find(sentence.begin(), sentence.end(), ',') != sentence.end());
        if (!was_comma)
        {
            std::cout << sentence << '\n';
        }
    }
    
    system("pause");
    return 0;
}
Nastusha1822
0 / 0 / 0
Регистрация: 11.12.2013
Сообщений: 27
16.07.2014, 05:25  [ТС]     Вывести предложения, не содержащие запятых #4
John Prick, откомментируй, пожалуйста)

Добавлено через 1 час 59 минут
И выводит он мне жутко большое число, хотя должен быть 0.
Ilot
Модератор
Эксперт С++
1765 / 1140 / 221
Регистрация: 16.05.2013
Сообщений: 3,017
Записей в блоге: 5
Завершенные тесты: 1
16.07.2014, 10:00     Вывести предложения, не содержащие запятых #5
Кликните здесь для просмотра всего текста
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
#include <cstdlib>
#include <iostream>
#include <fstream>
#include <string>
#include <iterator>
 
int main()
{
    system("chcp 1251");
    std::ifstream in("input.txt");
    /** Проверяем открытие файла */
    if (!in.is_open()) {
        std::cout << "Open file failed." << std::endl;
        return EXIT_FAILURE;
    }
    /** Объявляем строку для хранения данных их файла */
    std::string text;
    /** Заносим содержимое файла в строку */
    std::getline(in, text);
    /** Объявляем маску для поиска предложений */
    std::string mask(".!?");
    /** Вводим индексы для выделения предложений и сразу ищем первое предложение */
    std::string::size_type idx_last  = 0;
    std::string::size_type idx_first = text.find_first_of(mask, idx_last);
    /** Пока возможно выделить предложение */
    while (idx_first != std::string::npos) {
        /** Если индекс вхождения запятой больше индекса окончания предложения вывести данное предложение */
        if(text.find(",", idx_last) > idx_first)
            std::cout << text.substr(idx_last, idx_first - idx_last + 1) << std::endl << std::endl;
        /** Обновляем значения индексов */
        idx_last = idx_first + 1;
        idx_first = text.find_first_of(mask, idx_last + 1);
    }
    system("pause");
    return EXIT_SUCCESS;
}
Mr.X
Эксперт С++
 Аватар для Mr.X
2799 / 1575 / 246
Регистрация: 03.05.2010
Сообщений: 3,656
16.07.2014, 17:02     Вывести предложения, не содержащие запятых #6
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
/////////////////////////////////////////////////////////////////////////////////////////
//Надо написать программу, которая считывает текст из файла и выводит на экран только 
//предложения, не содержащие запятых.
/////////////////////////////////////////////////////////////////////////////////////////
#include <algorithm>
#include <cctype>
#include <fstream>
#include <iostream>
#include <iterator>
#include <string>
#include <sstream>
#include <vector>
/////////////////////////////////////////////////////////////////////////////////////////
typedef std::string             T_str;
typedef T_str::size_type        T_pos;
typedef std::vector< T_str >    T_sentences;
/////////////////////////////////////////////////////////////////////////////////////////
char    const   COMMA_SYMB          =   ',';
char    const   POINT_SYMB          =   '.';
char    const   EXCLAMATION_MARK    =   '!';
char    const   QUESTION_MARK       =   '?';
 
T_str   const   ELLIPSIS            =   "...";
/////////////////////////////////////////////////////////////////////////////////////////
struct  T_contains_commas
{
    bool    operator() ( T_str  const   &   sentence )
    {
        return  sentence.find( COMMA_SYMB )   !=  T_str::npos;
    }
};
/////////////////////////////////////////////////////////////////////////////////////////
void  if_is_ellipsis_move_pos_in_text
    (
        T_pos           &   sentence_end_pos,
        T_str   const   &   text
    )
{
    if  (
            text.substr( sentence_end_pos, 3 )  ==  ELLIPSIS
        )
    {
        sentence_end_pos += 2;
    }
}
/////////////////////////////////////////////////////////////////////////////////////////
void    trim_front( T_str     &   str )
{
    while   (
                    str.size() > 0
                &&  isspace
                        (
                            str.front()
                        )
            )
    {
        str.erase( 0, 1 );
    }
}
/////////////////////////////////////////////////////////////////////////////////////////
void    print_sentences_do_not_contain_commas_from_file_with_name( T_str    const   &   file_name )
{
    std::ifstream   ifile( file_name );
 
    if( !ifile )
    {
        std::cout   <<  "Файла с именем \""
                    <<  file_name
                    <<  "\" не существует."
                    <<  std::endl;
    }
 
    std::stringstream   sstream;
    sstream     <<  ifile.rdbuf();
    T_str   text    =   sstream.str();
 
    T_str           sentence;
    T_sentences     sentences;
 
    while   (
                !text.empty()
            )
    {
        auto    sentence_end_it     =   std::find_if
                                            (
                                                text.begin  (),
                                                text.end    (),
                                                ispunct
                                            );
 
        T_pos   sentence_end_pos    =   std::distance
                                            (
                                                text.begin(),
                                                sentence_end_it
                                            );
 
        sentence_end_pos    =   std::min
                                    (
                                        sentence_end_pos,
                                        text.size() - 1
                                    );
 
 
        if_is_ellipsis_move_pos_in_text
            (
                sentence_end_pos,
                text
            );
 
        char    punct_symb              =   text[ sentence_end_pos ];
 
        bool    is_sentence_end_symbol  =       punct_symb  ==  POINT_SYMB
                                            ||  punct_symb  ==  EXCLAMATION_MARK
                                            ||  punct_symb  ==  QUESTION_MARK;
 
        sentence    +=  text.substr     ( 0, sentence_end_pos + 1 );
        text.erase                      ( 0, sentence_end_pos + 1);
 
        if  (
                    text.empty()
                ||  is_sentence_end_symbol
            )
        {
            trim_front( sentence );
 
            if  (
                    !sentence.empty()
                )
            {
                sentences.push_back( sentence );
            }
            sentence.clear();
        }//if
    }//while
 
    T_sentences     sentences_without_commas;
 
    std::remove_copy_if
        (
            sentences.begin     (),
            sentences.end       (),
            std::back_inserter  ( sentences_without_commas ),
            T_contains_commas   ()
        );
 
    if  (
            sentences_without_commas.empty()
        )
    {
        std::cout   <<  "В файле нет предложений без запятых."
                    <<  std::endl;
    }
    else
    {
        std::copy
            (
                sentences_without_commas.begin  (),
                sentences_without_commas.end    (),
                std::ostream_iterator<T_str>    ( std::cout, "\n" )
            );
    }
}
/////////////////////////////////////////////////////////////////////////////////////////
int     main()
{
    std::locale::global(std::locale(""));
    T_str   const   FILE_NAME   =   "input.txt";
    print_sentences_do_not_contain_commas_from_file_with_name( FILE_NAME );
    std::cin.sync();
    std::cin.get();
}
Yandex
Объявления
16.07.2014, 17:02     Вывести предложения, не содержащие запятых
Ответ Создать тему
Опции темы

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