Определите для класса 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
C/C++
Помогите пожалуйста с задачей на C++
#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");
}
#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");
}
Похожие вопросы
- Помогите пожалуйста с задачей на c++, если кто-нибудь захочет помочь.
- Помогите пожалуйста решить задачу на C ИЛИ C#
- Всем привет. Помогите пожалуйста с задачей на C++
- Помогите пожалуйста с задачей на C++
- Помогите пожалуйста решить задачу на C++
- Прошу помочь с двумя задачами по C++. Есть код моей попытки. Буду рад если напишите проги.
- Помогите пожалуйста сделать задачу по программированию C++
- Помогите пожалуйста с задачей, нужно написать на c++ программу
- Помогите, пожалуйста, решить задачу C++.
- Помогите пожалуйста написать код на c++, выводящий имя, фамилию и дату рождения нескольких человек
I'3Hi
==
1jpu'ZJ
Оно выводит yes хоть должно no