Написать структуру, которая обрабатывала бы входные данные следующим образом. На входе даётся целое число, указывающее количество операций. Затем сами операции:
операция добавление элемента в контейнер и сам элемент: ADD 5;
операция проверки наличие элемента и вывод в консоль "YES", если элемент есть и "NO", если элемент не найден: PRESENT 3;
вывод в консоль общее количество элементов конетейнера: COUNT.
Например: На входе:
4
ADD 5
PRESENT 3
PRESENT 5
COUNT
Ответ:
NO
YES
1
Код:
#include <iostream>
#include <set>
#include <algorithm>
#include <string>
using namespace std;
struct SET{
set<int>s;
int add_num(int n){cin>>n; return s.insert(n);}
void present_num(int n);
void COUNT();
};
void SET::present_num(int n){
cout << (s.count(n) ? "YES" : "NO") << "\n"; // если количество не
} //0, тогда "YES", если 0, "NO".
void SET::COUNT(){
cout << s.size() << endl;
}
int main(){
int m, n;
SET s;
for (int i = 0; i < m; ++i){
string cmd;
cin >> cmd;
if(cmd == "ADD") {
s.add_num(n);
}
else if (cmd == "PRESENT"){
s.present_num(n);
}
else if (cmd == "COUNT") s.COUNT();
}
return 0;
}
Вы не считываете количество команд. У вас есть цикл, где счетчик сравнивается с переменной m
, но вы ее не инициализировали. Сделайте это перед входом в цикл, тогда считаете столько команд, сколько требуется.
Вы используете char
для хранения строки. char
- это один символ. Вам нужно использовать string
. Функции strcmp
, strncmp
- они работают с типом char*
. Вы можете конечно его использовать, но это подход более характерный для C, не C++. Будущее уже наступило, string
и можно сравнивать оператором ==
.
Вы объявили переменную n
, передаете в функции, но нигде не пишете в нее. Вместо этого вы читаете из cin
внутри функции add_num
. Если вы передаете параметр, вы должны использовать не cin
, а его. Считывать нужно в мейне, после того как определили команду.
Нет использования переменной item
. Можно ее убрать.
Вы зачем-то возвращаете int
из add_num
, и не используете значение.
Вам настоятельно рекомендуют использовать strncmp
, и я так понял, не объяснили, почему. А разница вот в чем:
strcmp
- сравнивает строки полностью, поэтому мы и не указываем длину при вызове.
strncmp
- сравнивает только первые n символов.
Это значит, что если вы сравните строки вот так:
cout << strncmp ("ADDsgfdghfsdgh", "ADD", 3) << endl;
Ответ будет 0, типа строки равны, а на самом деле они не равны.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Есть ли какая нибудь замена, либо аналогия временной C++ библиотеки chrono (в ходящей в пространство имен std) в C ??
Мне нужно от минимального элемента вектора до максимального поменять знаки элементов на противоположные
Подскажите как можно выставить пустое/нулевое значение для типа
Выходят ошибки вроде "class "llvm::Attribute" не содержит члена "ArgMemOnly", "не удаётся открыть источник файл llvm/IR/Intrinsicsgen" и похожие