Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
13 / 18 / 6
Регистрация: 02.05.2018
Сообщений: 545

Вывести те слова предложения, которые отличны от последнего слова предложения и удовлетворяют следующему свойству:

26.05.2018, 19:37. Показов 2367. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
C помощью текстового редактора создать файл, содержащий текст не более 10 строк, длина строки текста не должна превышать 80 символов.
Написать функцию, которая принимает строки из файла и обрабатывает следующим образом: вывести те слова предложения, которые отличны от последнего слова предложения и удовлетворяют следующему свойству: слово симметрично.
Результат выводить в текстовый файл и на экран.

Желательно ограничиваться библиотеками <fstream> <string>, <vector>. Если есть возможность <vector> не использовать
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
26.05.2018, 19:37
Ответы с готовыми решениями:

Вывести те слова предложения, которые отличны от последнего слова предложения и удовлетворяют следующему свойству:
C помощью текстового редактора создать файл, содержащий текст не более 10 строк, длина строки текста не должна превышать 80 символов. ...

Вывести те слова предложения, которые отличны от последнего слова предложения и удовлетворяют следующему свойству:
C помощью текстового редактора создать файл, содержащий текст не более 10 строк, длина строки текста не должна превышать 80 символов. ...

Напечатать те слова последовательности, которые отличны от первого слова и удовлетворяют следующему свойству
Дана последовательность слов. Напечатать те слова последовательности, которые отличны от первого слова и удовлетворяют следующему свойству:...

2
 Аватар для anapshy
531 / 272 / 220
Регистрация: 14.11.2016
Сообщений: 1,052
26.05.2018, 22:20
Лучший ответ Сообщение было отмечено cherc как решение

Решение

Ищет предложения по знакам их окончания (см. ф-ю IsDelimSentence)
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
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <cctype> // ispunct isspace isalnum
 
template<typename _Ty>
struct Pair
{
    _Ty first;
    _Ty second;
};
 
template< class InputIt, class UnaryPredicate >
    InputIt find_if(InputIt, InputIt, UnaryPredicate);
template<typename _Iter>
    Pair<_Iter> FindWord(_Iter, _Iter);
template<typename _Iter>
    _Iter FindSentence(_Iter, _Iter);
template<typename _Iter>
    typename std::iterator_traits<_Iter>::difference_type Difference(_Iter, _Iter);
bool IsSymbolWord(const char&);
bool IsDelim(const char&);
bool IsDelimSentence(const char&);
 
enum : std::string::size_type { MAX_ROWS = 10, MAX_CHAR_STR = 80};
 
int main()
{
    std::fstream infile{ "input.txt", std::ios_base::in };
    if (!infile.is_open())
    {
        std::cout << "Input file not found!" << std::endl;
        return 1;
    }
    else
    {
        std::string str{};
        str.reserve(MAX_ROWS * MAX_CHAR_STR + MAX_ROWS + 1); // Резервируем память
        {
            // Считываем все строки и конектим их к str через пробел
            std::string buffer{};
            while (std::getline(infile, buffer))
            {
                str += buffer;
                str.push_back(' ');
            }
        }
        std::string::const_iterator beg_sentence{ str.cbegin() }, end_sentence{ str.cbegin() };
        std::fstream outfile{ "output.txt", std::ios_base::out | std::ios_base::trunc };
        while (end_sentence != str.cend()) // Пока есть предложения...
        {
            end_sentence = FindSentence(beg_sentence, str.cend()); // Ищем конец предложения
            std::vector<Pair<std::string::const_iterator>> data; /// Вектор для хранения слов предложения
            std::string::const_iterator beg_word{ beg_sentence };
            while (beg_word != end_sentence) // Пока есть слова...
            {
                Pair<std::string::const_iterator> temp = FindWord(beg_word, end_sentence); // Ищем слово в найденом предложении
                if (temp.first != temp.second) // Если это слово...
                {
                    data.push_back(temp); // добавляем его в вектор
                }
                beg_word = temp.second;
            }
            bool isPrint{}; // Был ли вывод результата?
            if (data.size() > 1)
            {
                std::string::difference_type length_back_word{ Difference(data.back().first, data.back().second) }; /// Длина последнего слова
                for (decltype(data)::size_type i{}; i < (data.size() - 1); ++i) // Перебираем все слова кроме последнего...
                {
                    if (Difference(data[i].first, data[i].second) == length_back_word) // Если длины одинаковы...
                    {
                        if (!isPrint) // Если вывода не было...
                        { // Выводим последнее слово
                            const std::string temp_str { data.back().first, data.back().second };
                            std::cout << temp_str << ": ";
                            outfile << temp_str << ": ";
                            isPrint = true;
                        }
                        // Выводим подходящие слова
                        std::cout << std::string{ data[i].first, data[i].second } << ' ';
                        outfile << std::string{ data[i].first, data[i].second } << ' ';
                    }
                }
            }
            if (isPrint) // Если был вывод...
            { // Делаем перенос строки
                std::cout << std::endl;
                outfile << std::endl;
            }
            beg_sentence = ((end_sentence != str.cend()) && ((end_sentence + 1) != str.cend())) ? end_sentence + 1 : end_sentence;
        }
    }
}
 
template<class InputIt, class UnaryPredicate>
InputIt find_if(InputIt first, InputIt last, UnaryPredicate p)
{
    for (; first != last; ++first)
    {
        if (p(*first))
        {
            return first;
        }
    }
    return last;
}
 
template<typename _Iter>
Pair<_Iter> FindWord(_Iter First, _Iter Last)
{
    Pair<_Iter> res{};
    res.first = find_if(First, Last, IsSymbolWord);
    res.second = find_if(res.first, Last, IsDelim);
    return res;
}
 
template<typename _Iter>
_Iter FindSentence(_Iter First, _Iter Last)
{
    return find_if(First, Last, IsDelimSentence);
}
 
bool IsSymbolWord(const char &Ch)
{
    return std::isalnum(Ch);
}
 
bool IsDelim(const char &Ch)
{
    return (std::isspace(Ch) || std::ispunct(Ch));
}
 
bool IsDelimSentence(const char &Ch)
{
    return (Ch == '.' || Ch == '!' || Ch == '?');
}
 
template<typename _Iter>
typename std::iterator_traits<_Iter>::difference_type Difference(_Iter First, _Iter Last)
{
    return (Last - First);
}
1
13 / 18 / 6
Регистрация: 02.05.2018
Сообщений: 545
29.05.2018, 17:38  [ТС]
Спасибо. А без <vector> можно сделать?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
29.05.2018, 17:38
Помогаю со студенческими работами здесь

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

Напечатать те слова последовательности, которые отличны от последнего слова и удовлетворяют следующему свойству
Дана последовательность слов. Напечатать те слова последовательности, которые отличны от последнего слова и удовлетворяют следующему...

Найти и сохранить в строке те слова, которые отличны от последнего слова и удовлетворяют следующему свойству
Дана строка. Словом текста считается любая последовательность букв латинского алфавита; между соседними словами - не менее одного...

Дана последовательность слов. Напечатать те слова последовательности, которые отличны от последнего слова и удовлетворяют следующему свойству: в слове
Дана последовательность слов. Напечатать те слова последовательности, которые отличны от последнего слова и удовлетворяют следующему...

Вывести те слова текста, которые отличны от последнего слова и удовлетворяют заданному свойству
Нужно решить задачу, просто тему пропустил, самому разобраться, что-то не получилось....и если можно, то прокомментируйте сортировку...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru