Класс инкапсулирует двоичное число, хранимое в виде строки S максимальной длины N. Определить операции циклического сдвига двоичного числа вправо или влево, а также инверсии этого числа (<<, >>, ~).
я не знаю как мне инкапсулировать строку s с длиной n
я пробовал
#pragma once
#include
#include
#define N 100
namespace Math
{
class Binary_number
{
private:
std::string S(N,"");
public:
Binary_number();
~Binary_number();
};
}
но мне выдает Binary_number.h(12,18): error C2059: синтаксическая ошибка: константа
как мне реализовать строку s максимальной длины n?
C/C++
Синтаксическая ошибка: константа строки в с++
#include <string>
#include <iostream>
using namespace std;
class Binary {
public:
explicit Binary(const size_t n) : n(n), bin(string(n, '0')) {}
Binary operator<<(const unsigned n) {
Binary tmp = *this;
for (auto i = 0U; i < n; ++i) {
auto front = tmp.bin.front();
tmp.bin += front;
tmp.bin.erase(0U, 1U);
}
return tmp;
}
Binary operator>>(const unsigned n) {
Binary tmp = *this;
for (auto i = 0U; i < n; ++i) {
auto back = tmp.bin.back();
tmp.bin = back + tmp.bin;
tmp.bin.pop_back();
}
return tmp;
}
Binary operator~() {
Binary tmp = *this;
for (auto& x : tmp.bin) x & 1 ? --x : ++x;
return tmp;
}
private:
size_t n;
string bin;
friend ostream& operator<<(ostream& out, const Binary& num) {
return out << num.bin;
}
friend istream& operator>>(istream& inp, Binary& num) {
string tmp;
inp >> tmp;
if (num.n == tmp.length()) {
num.bin = tmp;
} else if (num.n > tmp.length()) {
auto pos = num.n - tmp.length();
num.bin.replace(pos, tmp.length(), tmp);
} else {
num.bin = string(tmp.begin(), tmp.begin() + num.n);
}
return inp;
}
};
int main() {
system("chcp 1251 > nul");
Binary number(32);
cout << "Введите бинарное число: ";
cin >> number;
system("cls");
puts("Бинарное число:");
cout << number << '\n';
puts("Циклический сдвиг влево на 4 разряда:");
cout << (number << 4) << '\n';
puts("Циклический сдвиг вправо на 4 разряда:");
cout << (number >> 4) << '\n';
puts("Инверсия числа:");
cout << ~number << '\n';
system("pause > nul");
}
#include <iostream>
using namespace std;
class Binary {
public:
explicit Binary(const size_t n) : n(n), bin(string(n, '0')) {}
Binary operator<<(const unsigned n) {
Binary tmp = *this;
for (auto i = 0U; i < n; ++i) {
auto front = tmp.bin.front();
tmp.bin += front;
tmp.bin.erase(0U, 1U);
}
return tmp;
}
Binary operator>>(const unsigned n) {
Binary tmp = *this;
for (auto i = 0U; i < n; ++i) {
auto back = tmp.bin.back();
tmp.bin = back + tmp.bin;
tmp.bin.pop_back();
}
return tmp;
}
Binary operator~() {
Binary tmp = *this;
for (auto& x : tmp.bin) x & 1 ? --x : ++x;
return tmp;
}
private:
size_t n;
string bin;
friend ostream& operator<<(ostream& out, const Binary& num) {
return out << num.bin;
}
friend istream& operator>>(istream& inp, Binary& num) {
string tmp;
inp >> tmp;
if (num.n == tmp.length()) {
num.bin = tmp;
} else if (num.n > tmp.length()) {
auto pos = num.n - tmp.length();
num.bin.replace(pos, tmp.length(), tmp);
} else {
num.bin = string(tmp.begin(), tmp.begin() + num.n);
}
return inp;
}
};
int main() {
system("chcp 1251 > nul");
Binary number(32);
cout << "Введите бинарное число: ";
cin >> number;
system("cls");
puts("Бинарное число:");
cout << number << '\n';
puts("Циклический сдвиг влево на 4 разряда:");
cout << (number << 4) << '\n';
puts("Циклический сдвиг вправо на 4 разряда:");
cout << (number >> 4) << '\n';
puts("Инверсия числа:");
cout << ~number << '\n';
system("pause > nul");
}
char[N]
Похожие вопросы
- Синтаксическая ошибка класса. C++
- Ошибка с русскими символами в языке C++ программе xcode. Пропадает если указать большее количество элементов в строке.
- C++: "С-Строка" и ошибка
- Что значит указатель константа на C++?
- Как реализовать поиск похожей строки в базе данных?
- Найти максимальный элементы в строке матрицы
- Программирование на С++ (строки)
- Двумерный динамический массив с неизвестны количеством столбиков или строк
- Передача строк в функцию С++
- С++. Упорядочить строки массива A в порядке убывания сумм цифр первого элемента каждой строки.