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

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

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

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

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

Файлы

Помогите, пожалуйста. Надо написать программу, которая считывает текст из файла и выводит на экран только предложения, не содержащие запятых.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.07.2014, 11:24
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Вывести предложения, не содержащие запятых (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
779 / 712 / 131
Регистрация: 27.07.2012
Сообщений: 2,045
Завершенные тесты: 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
Модератор
Эксперт С++
1809 / 1166 / 227
Регистрация: 16.05.2013
Сообщений: 3,074
Записей в блоге: 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
Эксперт С++
3049 / 1694 / 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();
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.07.2014, 17:02
Привет! Вот еще темы с ответами:

Написать программу, которая считывает текст из файла и выводит на экран только предложения, не содержащие запятых - C++
Начало уже есть, но что-то не тащит. Помогите пожалуйста... #include &lt;stdio.h&gt; #include &lt;string.h&gt; int main() { FILE *f; ...

Написать программу, которая считывает текст из файла и выводит на экран только предложения, не содержащие запятых. - C++
Здравствуйте. Прошу помощи в написание программу на C &quot;Написать программу, которая считывает текст из файла и выводит на экран только...

Нужна программа, которая считывает текст из файла и выводит на экран только предложения, не содержащие запятых - C++
Помогите!!! нужна программа, которая считывает текст из файла и выводит на экран только предложения не содержащие запятых.

Вывести из файла предложения, в которых нет запятых - C++
Задание: вывести из файла предложения, в котором нет запятых Выводится ошибка: Невозможно найти или открыть pdb код: //...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
16.07.2014, 17:02
Ответ Создать тему
Опции темы

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