C/C++

Помогите пожалуйста с задачей на C++

Определите для класса String (строка) операции ==, !=, <, >, <= и >=. Строки должны сравниваться в так называемом лексикографическом порядке. Это порядок, в котором строки расположены в словаре.

Формально, если сравниваются две строки a и b, то алгоритм сравнения выглядит так:

если a[0] < b[0], то a < b;
если a[0] > b[0], то a > b;
если a[0] == b[0], то алгоритм переходит к сравнению следующего символа.
Если все символы в строках совпали, то меньшей считается более короткая строка. Например, "abc" < "abcd". Если в строках совпадают все пары символов и строки имеют одинаковую длину, то они считаются равными.

Вам с клавиатуры вводится две строки s1 и s2 и знак операции между ними. Проверьте истинность неравенства/равенства.

Формат входных данных
В первой и третьей строке вводятся строки s1 и s2 соответственно. Каждая из двух строк состоит и символов с ASCII-кодами от 32 до 126, а их длины не превышают 100 000 символов.

Во второй строке вводится одна из шести строк ­— <, >, <=, >=, ==, !=.

Формат выходных данных
Требуется вывести «YES», если неравенство/равенство выполняется, или «NO», если нет.

входные данныевыходные данные
abc
<
bc
выходные данные
YES
входные данные
abcde
==
abcde
выходные данные
YES
входные данные
abc
>
abc
выходные данные
NO
#include <iostream>
#include <cstring>
using namespace std;
class String {
public:
String() : n(0), str(nullptr) {}
String(const char* cs) : n(strlen(cs)), str(new char[n]) { copy(cs); }
~String() {
if (str != nullptr) {
delete[] str;
str = nullptr;
}
}
String& operator=(const char* cs) {
if (str != nullptr) delete[] this->str;
this->n = strlen(cs);
this->str = new char[n];
this->copy(cs);
return *this;
}
const char* cstr()const {
char* box = new char[n + 1];
for (auto i = 0U; i < n; ++i) box[i] = str[i];
box[n] = 0;
return box;
}
private:
size_t n;
char* str;
void copy(const char* cs) {
for (auto i = 0U; i < n; ++i) str[i] = cs[i];
}
friend bool operator==(const String& a, const String& b) { return strcmp(a.cstr(), b.cstr()) == 0; }
friend bool operator==(const String& a, const char* b) { return strcmp(a.cstr(), b) == 0; }
friend bool operator==(const char* a, const String& b) { return strcmp(a, b.cstr()) == 0; }
friend bool operator!=(const String& a, const String& b) { return strcmp(a.cstr(), b.cstr()) != 0; }
friend bool operator!=(const String& a, const char* b) { return strcmp(a.cstr(), b) != 0; }
friend bool operator!=(const char* a, const String& b) { return strcmp(a, b.cstr()) != 0; }
friend bool operator<(const String& a, const String& b) { return strcmp(a.cstr(), b.cstr()) < 0; }
friend bool operator<(const String& a, const char* b) { return strcmp(a.cstr(), b) < 0; }
friend bool operator<(const char* a, const String& b) { return strcmp(a, b.cstr()) < 0; }
friend bool operator<=(const String& a, const String& b) { return strcmp(a.cstr(), b.cstr()) <= 0; }
friend bool operator<=(const String& a, const char* b) { return strcmp(a.cstr(), b) <= 0; }
friend bool operator<=(const char* a, const String& b) { return strcmp(a, b.cstr()) <= 0; }
friend bool operator>(const String& a, const String& b) { return strcmp(a.cstr(), b.cstr()) > 0; }
friend bool operator>(const String& a, const char* b) { return strcmp(a.cstr(), b) > 0; }
friend bool operator>(const char* a, const String& b) { return strcmp(a, b.cstr()) > 0; }
friend bool operator>=(const String& a, const String& b) { return strcmp(a.cstr(), b.cstr()) >= 0; }
friend bool operator>=(const String& a, const char* b) { return strcmp(a.cstr(), b) >= 0; }
friend bool operator>=(const char* a, const String& b) { return strcmp(a, b.cstr()) >= 0; }
friend ostream& operator<<(ostream& out, const String& s) {
for (auto i = 0U; i < s.n; ++i) out.put(s.str[i]);
return out;
}
friend istream& operator>>(istream& inp, String& s) {
char tmp[100000];
inp.getline(tmp, 100000);
s = tmp;
return inp;
}
};
int main() {
String s1, op, s2;
cin >> s1 >> op >> s2;
bool rez;
if (op == "<") rez = s1 < s2;
if (op == ">") rez = s1 > s2;
if (op == "<=") rez = s1 <= s2;
if (op == ">=") rez = s1 >= s2;
if (op == "==") rez = s1 == s2;
if (op == "!=") rez = s1 != s2;
cout << (rez ? "YES" : "NO");
system("pause > nul");
}
АД
Андрей Ден
54 976
Лучший ответ
Шахзодбек Отажонов Это решение не работает при некоторых случаях например:
I'3Hi
==
1jpu'ZJ
Оно выводит yes хоть должно no