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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Nastusha1822
0 / 0 / 0
Регистрация: 11.12.2013
Сообщений: 27
#1

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

11.07.2014, 11:24. Просмотров 444. Ответов 5
Метки нет (Все метки)

Файлы

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

Из текстового файла неизвестного размера вывести на экран все предложения, не содержащие запятых C++
Написать программу, которая считывает текст из файла и выводит предложения, не содержащие запятых C++
C++ Считать текст из файла и вывести на экран только предложения, не содержащие запятых
Вывести на экран все слова предложения, содержащие в качестве подстроки слово w C++
C++ Вывод на экран только предложения, не содержащие запятых.
C++ Вывести только предложения, содержащие введенное слово
C++ Вывести только предложения, содержащие введенное слово (исправить)
Вывести из файла предложения, в которых нет запятых 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
757 / 690 / 124
Регистрация: 27.07.2012
Сообщений: 1,975
Завершенные тесты: 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
Модератор
Эксперт С++
1780 / 1155 / 223
Регистрация: 16.05.2013
Сообщений: 3,042
Записей в блоге: 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
3021 / 1677 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
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     Вывести предложения, не содержащие запятых
Ответ Создать тему
Опции темы

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