Мой код: https://pastebin.com/6EhegLKg
Задание : Определите в шаблонном классе операцию «меньше» так, что она будет проверять, что длина первого массива меньше, чем длина второго.
Добавьте шаблонному классу специализацию для случая массива из символов. В этой специализации массивы должны сравниваться как строки, то есть в лексикографическом порядке.
В этой задаче с клавиатуры вводятся два массива A1 и A2, тип которых указан отдельно. Проверьте, что A1 < A2.
Формат входных данных
В первой строке с клавиатуры вводится индикатор, для какого типа данных последуют массивы — строка «INT» (целое число), или строка «CHAR» (символ), или строка «FRACTION» (дробь).
В следующих строках вводятся два массива, состоящие из значений указанного типа. Все числа не превышают по модулю 109, знаменатели не равны 0, а символы имеют ASCII-коды от 32 до 126.
Формат выходных данных
Требуется вывести «YES», если первый массив меньше второго, и «NO», если нет.
Примечания
Лексикографическое сравнение - сравнение наборов данных "по алфавиту".
Формально, если сравниваются две строки a и b, то алгоритм сравнения выглядит так:
- если a[0] < b[0], то a < b;
- если a[0] > b[0], то a > b;
- если a[0] == b[0], то алгоритм переходит к сравнению следующего символа.
входные данные
FRACTION
3
7/3 1/2 9/4
4
10/1 12/1 2/1 17/35
выходные данные
YES
входные данные
CHAR
1
z
4
a b c d
выходные данные
NO
Я не понимаю как нужно сделать в случае с char! "Добавьте шаблонному классу специализацию для случая массива из символов. В этой специализации массивы должны сравниваться как строки, то есть в лексикографическом порядке." - как это понять? Как это сделать, помогите пожалуйста!
В моем коде все что связано с char на строчках 75-83 и 125-142.
C/C++
Помогите пожалуйста с C++
#include <iostream>
#include <string>
#include <sstream>
using namespace std;
struct Fraction {
pair<int, int> frac;
Fraction() : frac({ 0, 1 }) {}
Fraction operator()(int x) {
Fraction f;
f.frac.first = frac.first * x;
f.frac.second = frac.second * x;
return f;
}
pair<int, int> split(const string& str, char delim = '/') {
stringstream ss(str);
string token;
getline(ss, token, delim);
auto a = stoi(token);
getline(ss, token);
auto b = stoi(token);
return { a, b };
}
friend istream& operator>>(istream& inp, Fraction& f) {
string line;
inp >> line;
f.frac = f.split(line);
return inp;
}
friend ostream& operator<<(ostream& out, const Fraction& f) {
return out << f.frac.first << '/' << f.frac.second;
}
friend bool operator<(const Fraction& a, const Fraction& b) {
return double(a.frac.first) / a.frac.second < double(b.frac.first) / b.frac.second;
}
};
template<typename Type>
class Array {
public:
Array() : len(0), data(nullptr) {}
Array(size_t n) : len(n), data(new Type[len]) {}
~Array() {
if (data != nullptr) {
delete[] data;
data = nullptr;
}
}
bool operator<(const Array<char>& a) {
return string{ data, data + len } < string{ a.data, a.data + a.len };
}
private:
size_t len;
Type* data;
friend ostream& operator<<(ostream& out, const Array& a) {
for (auto i = 0U; i < a.len; ++i) out << a.data[i] << ' ';
return out;
}
friend istream& operator>>(istream& inp, Array& a) {
for (auto i = 0U; i < a.len; ++i) inp >> a.data[i];
return inp;
}
friend bool operator<(const Array& a, const Array& b) {
return a.len < b.len;
}
};
template<typename Type>
void test() {
size_t la;
cin >> la;
Array<Type> a(la);
cin >> a;
size_t lb;
cin >> lb;
Array<Type> b(lb);
cin >> b;
puts(a < b ? "YES" : "NO");
}
int main() {
string command;
while (true) {
cin >> command;
if (command == "CHAR") test<char>();
else if (command == "FRACTION") test<Fraction>();
else puts("Error command!");
puts("");
}
system("pause > nul");
}
#include <string>
#include <sstream>
using namespace std;
struct Fraction {
pair<int, int> frac;
Fraction() : frac({ 0, 1 }) {}
Fraction operator()(int x) {
Fraction f;
f.frac.first = frac.first * x;
f.frac.second = frac.second * x;
return f;
}
pair<int, int> split(const string& str, char delim = '/') {
stringstream ss(str);
string token;
getline(ss, token, delim);
auto a = stoi(token);
getline(ss, token);
auto b = stoi(token);
return { a, b };
}
friend istream& operator>>(istream& inp, Fraction& f) {
string line;
inp >> line;
f.frac = f.split(line);
return inp;
}
friend ostream& operator<<(ostream& out, const Fraction& f) {
return out << f.frac.first << '/' << f.frac.second;
}
friend bool operator<(const Fraction& a, const Fraction& b) {
return double(a.frac.first) / a.frac.second < double(b.frac.first) / b.frac.second;
}
};
template<typename Type>
class Array {
public:
Array() : len(0), data(nullptr) {}
Array(size_t n) : len(n), data(new Type[len]) {}
~Array() {
if (data != nullptr) {
delete[] data;
data = nullptr;
}
}
bool operator<(const Array<char>& a) {
return string{ data, data + len } < string{ a.data, a.data + a.len };
}
private:
size_t len;
Type* data;
friend ostream& operator<<(ostream& out, const Array& a) {
for (auto i = 0U; i < a.len; ++i) out << a.data[i] << ' ';
return out;
}
friend istream& operator>>(istream& inp, Array& a) {
for (auto i = 0U; i < a.len; ++i) inp >> a.data[i];
return inp;
}
friend bool operator<(const Array& a, const Array& b) {
return a.len < b.len;
}
};
template<typename Type>
void test() {
size_t la;
cin >> la;
Array<Type> a(la);
cin >> a;
size_t lb;
cin >> lb;
Array<Type> b(lb);
cin >> b;
puts(a < b ? "YES" : "NO");
}
int main() {
string command;
while (true) {
cin >> command;
if (command == "CHAR") test<char>();
else if (command == "FRACTION") test<Fraction>();
else puts("Error command!");
puts("");
}
system("pause > nul");
}
Неизвестно Неизвестно
спасибо:)
да сложно
Похожие вопросы
- Прошу, помогите пожалуйста с C++
- Помогите пожалуйста с c++
- Помогите пожалуйста с C++
- Помогите пожалуйста с C++.
- Здравствуйте помогите пожалуйста программирование c++
- Помогите решить задачу пожалуйста, в C++
- Помогите пожалуйста написать код.(C++)
- Помогите пожалуйста - создать 4 массива на c++
- Помогите, пожалуйста решить на C++, используя многомерные статические массивы
- Помогите пожалуйста написать код на c++, выводящий имя, фамилию и дату рождения нескольких человек