Здравствуйте. Я создал класс, в котором изначально введена шестнадцатеричная строка. Так же введена ещё одна строка. И мы проверяем, если строки равны, то выводим 1, если нет, то 0. Затем складываем эти строки и выводим их длину. И нужно перевести эти строки в восьмеричную систему. Последнее у меня и не выходит. Это можно сделать как через наследование так и нет. В СИ знаю, что можно перевести так:
int n;
cout << "Введите шестнадцатеричное число: ";
scanf("%x", &n);
printf("%s %o", "Восьмеричное равно ", n);
Сделать, чтобы это всё работает, не выходит. Подскажите, пожалуйста, как это реализовать.
Вот мой код. Преподаватель сказал, что исправлять ничего не нужно. Только сделать перевод.
String.h
#pragma once
#include <iostream>
#include <cstring>
using namespace std;
class String
{
protected:
int Length;
char* Str;
public:
String();
String(const char* ptr);
String(const String& t);
String& operator = (String& t);
String& operator += (const String& t);
bool operator == (const String& t) const;
bool operator != (const String& t) const;
bool is_empty() const;
const char* getStr() const;
int getLength() const;
ostream & show(ostream & os) const;
friend ostream & operator << (ostream & os, const String & s)
{
return s.show(os);
}
~String();
};
String.cpp
#include "String.h"
#include <iostream>
#include <cstring>
using namespace std;
String::String()
{
Str = 0;
Length = 0;
}
String::String(const char* ptr)
: Length(strlen(ptr)), Str(new char[Length + 1])
{
strcpy(Str, ptr);
}
String::String(const String& t)
: Length(strlen(t.Str)), Str(new char[Length + 1])
{
strcpy(Str, t.Str);
}
String& String::operator = (String& t)
{
swap(Length, t.Length);
swap(Str, t.Str);
return *this;
}
String& String::operator += (const String& t)
{
int newLength = Length + t.Length;
char *newStr = new char[newLength + 1];
strcpy(newStr, Str);
strcat(newStr, t.Str);
delete[] Str;
Str = newStr;
Length = newLength;
return *this;
}
bool String::operator == (const String& t) const
{
return Length == t.Length && strcmp(Str, t.Str) == 0;
}
bool String::operator != (const String& t) const
{
return !(operator == (t));
}
bool String::is_empty() const
{
return Str == 0 || Str[0] == '\0';
}
const char* String::getStr() const
{
return Str;
}
int String::getLength() const
{
return Length;
}
ostream & String::show(ostream & os) const
{
return os << "\"" << (Str ? Str : "") << "\"";
}
String::~String()
{
Length = 0;
delete[] Str;
Str = 0;
}
main.cpp
#include "String.h"
#include <iostream>
#include <conio.h>
#include <cstring>
using namespace std;
int main()
{
setlocale(LC_ALL, "Russian");
String s("0 1 2 3 4 5 6 7 8 9 A B C D E F");
String f("Qwertyy");
cout << s << endl;
cout << (s == f) << endl;
s += f;
cout << s << endl;
_getch();
return 0;
}