Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
 Аватар для tyan
0 / 0 / 0
Регистрация: 03.06.2012
Сообщений: 14

Задачка из страуструпа , глава 4 ,вектора

28.11.2013, 18:59. Показов 2662. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, помогите пожалуйста довести задачку до ума

Вот сама задачка:
{deleted}
 Комментарий модератора 
Нарушены п.5.18 и 5.19 Правил
5.18. Запрещено размещать задания и решения в виде картинок и других файлов с их текстом.
5.19. Запрещено создавать темы в виде ссылок на задания или коды программ, расположенные на других сайтах.

Делается она по такому примеру:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include "std_lib_facilities.h"
 
//------------------------------------------------------------------------------
 
// simple dictionary: list of sorted words:
int main()
{
    vector<string> words; 
    string temp;
    while (cin>>temp)                // read whitespace separated words
        words.push_back(temp);       // put into vector
 
    cout << "Number of words: " << words.size() << endl;
 
    sort(words.begin(),words.end()); // sort "from beginning to end"
 
    for (int i = 0; i< words.size(); ++i) 
        if (i==0 || words[i-1]!=words[i]) // is this a new word?
            cout << words[i] << "\n";
}
 
//------------------------------------------------------------------------------

Мой код:

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
#include "../../std_lib_facilities.h"
 
 
 
 
int main()
{
 
vector<string> badwords;
string temp;
string disliked = "broccoli";
 
 
//ВВодим слова для обработки и печатаем кол-во слов
while (cin>>temp)
    badwords.push_back(temp);
    cout << "Kol-vo slov do obrabotki" << badwords.size() << endl;
    
 
//Проверяем, есть ли нежелательное слово
for (int i=0;i<badwords.size();i++)
    if (badwords[i]==disliked)
 
 
//Перезаписываем вектор
 
 
//тут хочу вывести новый вектор
cout << "Vivodim obnovlennii vektor" << endl;
for (int i=0;i<badwords.size();i++)
cout << badwords[i] << endl;
 
 
    keep_window_open();
}

Собственно не могу выполнить "//Перезаписываем вектор" и распечатку нового вектора
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
28.11.2013, 18:59
Ответы с готовыми решениями:

Глава 12 Страуструпа (графика)
Всем привет! Кто-нибудь справлялся с примером из главы 12? У меня не выходит. Суть в чем: простой пример, вывод обычного окна. ...

Упражнение №8 глава 5 из книги Страуструпа
Здравствуйте. Помогите решить задание. Напишите программу,считывающую ряд чисел и записывающую их в vector&lt;int&gt;.После того как...

Заменить нежелательные слова словом BLEEP.
Задача: Напишите программу, заглушающую нежелательные слова; иначе говоря, считайте слова из потока cin и выведите их в поток cout, заменив...

5
120 / 120 / 47
Регистрация: 29.03.2013
Сообщений: 237
28.11.2013, 19:38
C++
1
2
3
4
5
for (int i=0;i<badwords.size();i++) {
    if (badwords[i]==disliked) {
        badwords[i] = "BLEEP";
    } cout<<badwords[i]<<" ";
}
0
 Аватар для tyan
0 / 0 / 0
Регистрация: 03.06.2012
Сообщений: 14
28.11.2013, 19:45  [ТС]
Цитата Сообщение от scenotaph Посмотреть сообщение
C++
1
2
3
4
5
for (int i=0;i<badwords.size();i++) {
    if (badwords[i]==disliked) {
        badwords[i] = "BLEEP";
    } cout<<badwords[i]<<" ";
}
блин, вот так ошибка, спасибо!
0
0 / 0 / 0
Регистрация: 13.03.2015
Сообщений: 22
23.07.2015, 01:47
Сделал как тут парни отписались, но программа выводит лишь строчку с количеством слов в векторе и сигнал BLEEP, но список слов программа не выносит. Помогите пожалуйста

вот мой код
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
#include <conio.h>
#include "std_lib_facilities.h"
#include <clocale>
 
int main()
 
{
setlocale (LC_ALL, "Russian");
 
vector<string> words; 
    string temp;
    string disliked = "bro";
 
while (cin>>temp)  
    words.push_back(temp);
cout << "Количество слов в векторе: " << words.size() << endl;
 
    sort(words.begin(), words.end());
 
for (int i = 0; i<words.size(); ++i)
    if (words[i]==disliked){
        words[i]="BLEEP";
    cout << words[i];
    }
_getch();   
return 0;
keep_window_open();
}

Вот сама задача: Напишите программу, заглушающую нежелательные слова; иначе говоря, считайте слова из потока cin и выведите их в поток cout, заменив нежелательные слова словом BLEEP. Начните с одного нежелательного слова, например string disliked = "Broccoli"; Когда отладите программу, добавьте еще несколько нежелательных слов.

Добавлено через 1 час 0 минут
C++
1
2
3
4
5
6
for (int i = 0; i<words.size(); ++i){
        if (words[i] == disliked)
            cout << "BLEEP" << endl;    
        else 
            cout << words[i] << endl;
    }
Вот так заработала программа. Теперь надо ввести несколько нежелательных слов
как правильно это сделать, подскажите
0
0 / 0 / 0
Регистрация: 07.06.2017
Сообщений: 4
23.08.2017, 17:33
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
#include<std_lib_facilities.h>
 
int main()
{
    string dislike ="broccoli";
    string dislike2 ="braa";
    string dislike3 ="lol";// объявление строковой переменной "dislike" с присвоением ей значения "broccoli"
    vector<string>words;        // объявление вектора "Words"
vector<string>censured;         // объявление вектора "censured"
vector<string>beep;             // объявление вектора "beep"
    string word;                // объявление строковой переменной "Word"
    while(cin>>word)            // цикл ввода символов в переменую "Words"
    words.push_back(word);      // увелечение вектора на одну еденицу с записью значения переменной "word"
    cout <<"Number of words: " <<words.size() <<endl; //вывод на экран количество записей в векторе Words 
    for (int i=0;i<words.size();++i)  
        cout <<"words " <<i <<": " << words[i] <<endl;  // вывод на экран каждого значения в векторе words
        sort(words.begin(),words.end());     // сортировка вектора words
for (int i=0;i<words.size();++i) 
if (i==0||words[i-1]!=words[i])cout << words[i] <<endl;
    for (int i=0;i<words.size();++i)
            if (i==0||words[i-1]!=words[i])censured.push_back(words[i]); // исключение повторения слов с записью в новый вектор censured
        for (int i=0;i<censured.size();++i)
            if (censured[i]==dislike||censured[i]==dislike2||censured[i]==dislike3) beep.push_back("boom bleep");
            else beep.push_back(censured[i]);
        sort(beep.begin(),beep.end());
        cout <<"Number of beep: " <<beep.size() <<endl;
    for (int i=0;i<censured.size();++i) 
        cout <<"beep " <<i <<": " << beep[i] <<endl;
 
    system ("pause");
    return 0;
    }
0
1 / 1 / 0
Регистрация: 31.07.2018
Сообщений: 3
30.01.2020, 10:34
Добавлено через 7 минут
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
# include <iostream>
#include <sstream>
#include<string>
#include <locale>
# include <locale.h>
#include <vector>
#include <algorithm>
#include<cmath>
using namespace std;
inline void keep_window_open() { char ch; cin >> ch; }
/*
 6. Теперь измените тело цикла так, чтобы он считывал только одно число типа
double за один проход. Определите две переменные, чтобы определить, какое
из них имеет меньшее значение, а какое— большее среди всех ранее введенных
значений. За каждый проход цикла выводите на экран одно введенное число.
Если оно  окажется  наименьшим  среди  ранее  введенных,  выведите  на  экран
строку "Наименьшее среди ранее введенных". Если оно окажется наиболь-шим среди ранее введенных, выведите на экран строку "Наибольшее среди
ранее введенных".
7. Добавьте к каждому введенному числу типа double единицу измерения; иначе
говоря, введите значения, такие как 10cm, 2.5in, 5ft или 3.33m. Допустимыми
являются четыре единицы измерения: cm, m, in, ft. Коэффициенты преобразо-вания равны: 1m == 100cm, 1in == 2.54cm, 1ft == 12in. Индикаторы еди-ниц измерения введите в строку.
8. Если  введена  неправильная  единица  измерения,  например  yard,  meter,  km
и gallons, то ее следует отклонить.
9. Вычислите сумму введенных значений(помимо наименьшего и наибольшего)
и определите их количество. Когда цикл закончится, выведите на экран наи-меньшее значение, наибольшее значение, количество значений и их сумму. Об-ратите внимание на то, что накапливая сумму, вы должны выбрать единицу из-мерения(используйте метры).
10. Сохраните все введенные значения(преобразованные в метры) в векторе и вы-ведите их на экран.
11. Перед тем как вывести значения из вектора, отсортируйте их в возрастающем
порядке.
*/
int main() {
    setlocale(LC_ALL, "Russian");
    //wcout.imbue(locale("rus_rus.866"));
    //wcin.imbue(locale("rus_rus.866"));
    cout << "ПРИВЕТ МИР!!!\n\n";
 
    cout << "Ввод числа и единицы измерения. Для прекращения ввода: Ctrl+Z\n";
    /* В программе определены 4 ед. измерения, их сокращения: c, m, i, f. 
    Правило ввода пример: 
    1 m            - верныйй ввод
    1 c            - верныйй ввод
    1 i            - верныйй ввод
    1 f            - верныйй ввод
    1 s            - НЕ верныйй ввод 
    1 a            - НЕ верныйй ввод
    */
    vector <double> znacheniya;
    vector <char> measure;
    double temp;
    char ed_izm;
    char cm = 'c', m = 'm', inch = 'i', ft = 'f';
    int i = 0;
    double min = 0;
    double max = 0;
    bool first = true;
    while (cin >> temp >> ed_izm) {
        znacheniya.push_back(temp);
        measure.push_back(ed_izm);
        cout << "Вы ввели:   " << znacheniya[i] << " " << measure[i] << "\n";
        if (first) {
            first = false;
            min = temp;
            max = temp;
        }
        else
            if (temp > max) {
                cout << "Максимальное значение: " << znacheniya[i] << "\n";
                max = temp;
            }
            else
                if (temp < min) {
                    cout << "Минимальное значение: " << znacheniya[i] << "\n";
                    min = temp;
                }
        ++i;
    }
    cout << "\nВот, что вы ввели!!!\n";
    vector <double> znach_metr;
    double sum = 0;
    double course = 0;
    for (int j = 0; j < znacheniya.size(); ++j) {
        cout << "\n" << znacheniya[j] << " : " << measure[j];
        switch (measure[j]) {
        case 'c': course = znacheniya[j] / 100;        // Первевод см в м
            break;
        case 'm': course = znacheniya[j];
            break;
        case 'i': course = znacheniya[j] * 0.0254;     // Первевод дюймов(inch) в м
            break;
        case 'f': course = znacheniya[j] * 0.3048;     // Первевод футов в м
            break;
        default:
            cout << "  - Введены неверные единицы измерения!";
            course = 0;
            break;
        }
        sum += course;
        znach_metr.push_back(course);
    }
        cout << "\nКоличество введенных значений: " << znacheniya.size() << "\nСумма: " << sum <<" метров";
    cout << "\nПреобразованные в метры значения и отсортированные\n";
    sort(znach_metr.begin(), znach_metr.end());
    for (int j = 0; j < znach_metr.size(); ++j) {
        cout << znach_metr[j] << "\n";
    }
 
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
30.01.2020, 10:34
Помогаю со студенческими работами здесь

Задачка из книги Страуструпа...
Доброго времени суток всем! Заранее благодарен за ответы и, возможные, пути исправления... Итак: &quot;Считайте последовательности...

Задачка от Страуструпа для новичков
Вот задачка от Страуструпа для новичков char* cat(const char* str_1, const char* str_2) { int len_1 = strlen(str_1), ...

Задачка из книги Страуструпа на поиск минимального и максимального введенного числа
Здравствуйте могли бы вы мне помочь в решении задачи. Вот собственно само условие. Условие: Теперь измените тело цикла так, чтобы он...

Задачка на массив, вычисление длины вектора не получается(
дан вектор {Zi}, i=1,2,...,N. Вычислить длину этого вектора L=(Z1^2+Z2^2+...+Zn^2)^1/2. Указание: Координаты вектора занести в...

Найти выражение для: вектора скорости; вектора ускорения; модуля радиус-вектора
Товарищи, помогите пожалуйста решить. Радиус-вектор материальной точки задается выражением: r=(t^2+2)i+(3t^2+4)j Найти...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка SDL3 из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru