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

Написать консольного бота-калькулятор

30.04.2023, 16:19. Показов 936. Ответов 3

Студворк — интернет-сервис помощи студентам
Здравствуйте, в университете задали написать консольного бота-калькулятора. Я практически не шарю в программировании.

Бот должен обрабатывать запросы по типу "how much is 2 plus 2"; "2 * 3 =" "-3 multiplied by 3".

Код который я написала может обработать последние два примера, но при вводе "how much is 2 plus 2", "how much is " не удаляется.

Следовательно, ответ не выводится. По сути сначала названия операций должны заменяться на соответствующие значки, а после удаляться все, что не является операцией или операндом.

Скорее всего ошибка дурацкая, так что прошу помочь несведущей в программировании (

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
#include <iostream>     
#include <string>        
#include <sstream>   
#include <map>   
using namespace std;
 
string replace_words_with_operators(string input_str) {
    map<string, string> word_map = {
        {"plus", "+"},
        {"minus", "-"},
        {"multiplied by", "*"},
        {"divided by", "/"}
    };
 
    for (auto& pair : word_map) {
        size_t pos = input_str.find(pair.first);
        while (pos != string::npos) {
            input_str.replace(pos, pair.first.length(), pair.second);
            pos = input_str.find(pair.first, pos + pair.second.length());
        }
    }
 
    return input_str;
}
 
string remove_unnecessary_chars(string input_str) {
    string result_str = "";
    for (char& c : input_str) {
        if (isalnum(c) || c == '+' || c == '-' || c == '*' || c == '/' || c == ' ') {
            result_str += c;
        }
    }
 
    return result_str;
}
 
string remove_all_except_operators(string input_str) {
    input_str = replace_words_with_operators(input_str);
    input_str = remove_unnecessary_chars(input_str);
 
    cout << "Resulting string: " << input_str << endl;
 
    return input_str;
}
 
void parse_input(string input_str, int& operand1, int& operand2, char& operation) {
    istringstream parse_stream(input_str);
    parse_stream >> operand1 >> operation >> operand2;
}
 
void calculate(int operand1, int operand2, char operation) {
    switch (operation) {
    case '+': {
        int result = operand1 + operand2;
        cout << "Result: " << result << endl;
        break;
    }
    case '-': {
        int result = operand1 - operand2;
        cout << "Result: " << result << endl;
        break;
    }
    case '*': {
        int result = operand1 * operand2;
        cout << "Result: " << result << endl;
        break;
    }
    case '/': {
        if (operand2 == 0) {
            cout << "You can't divide by 0." << endl;
        }
        else {
            int result = operand1 / operand2;
            cout << "Result: " << result << endl;
        }
        break;
    }
    default: {
        cout << "Unknown operation: " << operation << endl;
        break;
    }
    }
}
 
int main() {
    string input_str;
    cout << "Enter command: " << endl;
    getline(cin, input_str);
 
    string result_str = remove_all_except_operators(input_str);
 
    int operand1, operand2;
    char operation;
    parse_input(result_str, operand1, operand2, operation);
 
    calculate(operand1, operand2, operation);
 
    return 0;
}
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
30.04.2023, 16:19
Ответы с готовыми решениями:

Защита от дурака для консольного приложения "Калькулятор"
Здравствуйте. Написал простенький калькулятор с 4 действиями: &quot;+&quot;, &quot;-&quot;, &quot;*&quot;, &quot;/&quot;. #include &lt;iostream&gt; #include...

Написать GUI для консольного приложения
Доброго времени суток всем. Имеется консольное приложение, хочу присобачить к нему GUI, но в виде именно отдельной программы, собственно...

Помогите написать Бота
Здравствуйте всем... Помогите написать как бы Бота. Цель смешная: Надо что бы в определеном месте экрана ну где будет нажодится текстовое...

3
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
01.05.2023, 10:24
Ну и где этот случай учитывается у тебя? В массив 8-13 добавь слова.
0
44 / 31 / 13
Регистрация: 19.12.2022
Сообщений: 107
01.05.2023, 10:32
Лучший ответ Сообщение было отмечено pophia как решение

Решение

Хм, если во вводе только "how much is" то обойтись можно обычным replace
C++
1
2
3
4
size_t pos = input_str.find("how much is ");
    if (pos != string::npos) {
        input_str.replace(pos, 12, "");
    }
Если нет, то замени в своём коде функцию remove_unnecessary_chars на эту:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
string remove_unnecessary_chars(string input_str) {
    string result_str = "";
    bool last_char_was_space = true;
    for (char& c : input_str) {
        if (isalpha(c)) {
            last_char_was_space = false;
        }
        else if (isdigit(c) || c == '+' || c == '-' || c == '*' || c == '/') {
            if (last_char_was_space == false) {
                result_str += " ";
                last_char_was_space = true;
            }
            result_str += c;
        }
        else if (isspace(c)) {
            last_char_was_space = true;
        }
    }
    return result_str;
}
1
0 / 0 / 0
Регистрация: 25.03.2023
Сообщений: 5
03.05.2023, 17:54  [ТС]
спасибо большое!!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
03.05.2023, 17:54
Помогаю со студенческими работами здесь

Написать чат бота
Задача следующая: Есть игровой клиент ip адрес коннекта я заснифферил. Хотелось бы что-бы прога коннектилась к клиенту заходила на сервак и...

Хочу написать бота
Здравствуйте форумчане! Я хочу сделать своего бота для какого то сайта(не своего), но пока что ничего в этом не понимаю. Язык хотел выбрать...

Как написать имя консольного окна из переменной
чтобы поменять имя консоли надо написать system(&quot;title ima_okna&quot;); а как вместо тектста ima_okna подставить переменную, ...

Как написать имя консольного окна из переменной
чтобы поменять имя консоли надо написать system(&quot;title ima_okna&quot;); а как вместо тектста ima_okna подставить переменную, system(&quot;title...

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


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru