#include <iostream>
#include <conio.h>
#include <string.h>
#include <stdio.h>
using namespace std;
class Strings
{
private:
char* str;
int len;
public:
Strings();
Strings(char* s); //конструктор с параметрами
Strings (Strings& s); //конструктор копирования
//const char* GetStr() { return str;} //метод получения строки
Strings operator= (const Strings&); //перегрузка оператора =
Strings operator/ (int); //перегрузка оператора /
Strings operator+ (Strings); //перегрузка оператора +
int Length(); //метод вычисления длинны строки
void Print(); //метод вывода строки
char* Strings::return_str() {return &str[0];}
short Strings::return_size(){return len;}
~Strings() {delete [] str;} //деструктор
};
Strings::Strings() {
str=new char[1];
*str=0;
len=0;
}
Strings::Strings(char* s){
len=strlen(s);
str=new char[len+1]; //инициализация
strcpy(str,s);
}
Strings::Strings(Strings & s)
{
len = s.len;
str = new char[len + 1]; // копирование
for (int i = 0; i < len; i++)
str[i] = s.str[i];
str[len] = '';
};
Strings Strings::operator+ (Strings str) {
/*char* sub = new char[len+_str.return_size()+1];
sub[0]='';
strcpy(sub, str); //копируем первую строку
strcat(sub, _str.return_str()); //добавляем вторую
return Strings(sub);*/
Strings result;
//delete result.str;
result.len = this->len + str.len;
result.str = new char [result.len +1];
int i =0;
for(int j=0; j < this->len; i++, j++){
result.str[i] = this->str[j];
}
for(int j=0; j < str.len; i++, j++){
result.str[i] = str.str[j];
}
result.str[i] = '';
return result;
}
Strings Strings::operator= (const Strings& _qstr) {
//Strings* res3 = new Strings();
//res3 = _qstr;
this->str = _qstr.str;
this->len=_qstr.len;
return *this;
}
Strings Strings::operator/ (int n) {
int i,j,k;
k = len; // Первоначально в массиве все элементы.
// k означает количество оставшихся после удаления.
for(i = k-1; i >= 0; i--)
{
if(i%2==0) // условие на удаление элемента массива
{
k--; // уменьшаем количество
for(j = i; j < k; j++) // сдвиг
str[j] = str[j+1];
str[j]='';
}
}
return str;
}
int Strings::Length()
{
int len = 0;
for (len = 0; str[len] != ''; len++);
return len;
}
void Strings::Print()
{
cout<<str<<endl;
}
Нужна помощь! Класс Строка, осталась одна ошибка :(
Класс строки: значение строки,конструктор по умолчанию, конструктор копирования, конструктор с параметрами, метод вычисления длинны строки, метод вывода строки, перегрузка операторов деления, присваивания, сложения.
Описать класс, три объекта R1, R2, R3, используя разные конструкторы. Уменьшить в 2 раза объект R2 удалением символов на парном месте. Сложить объекты R2, R3 и результат поместить в R1 Результат вывести на экран.
Код:
String.h
Код:
#include <iostream>
#include <conio.h>
#include <string.h>
#include <stdio.h>
using namespace std;
class Strings
{
private:
char* str;
int len;
public:
Strings();
Strings(char* s); //конструктор с параметрами
Strings (Strings& s); //конструктор копирования
//const char* GetStr() { return str;} //метод получения строки
Strings operator= (const Strings&); //перегрузка оператора =
Strings operator/ (int); //перегрузка оператора /
Strings operator+ (Strings); //перегрузка оператора +
int Length(); //метод вычисления длинны строки
void Print(); //метод вывода строки
char* Strings::return_str() {return &str[0];}
short Strings::return_size(){return len;}
~Strings() {delete [] str;} //деструктор
};
Strings::Strings() {
str=new char[1];
*str=0;
len=0;
}
Strings::Strings(char* s){
len=strlen(s);
str=new char[len+1]; //инициализация
strcpy(str,s);
}
Strings::Strings(Strings & s)
{
len = s.len;
str = new char[len + 1]; // копирование
for (int i = 0; i < len; i++)
str[i] = s.str[i];
str[len] = '';
};
Strings Strings::operator+ (Strings str) {
Strings result;
//delete result.str;
result.len = this->len + str.len;
result.str = new char [result.len +1];
int i =0;
for(int j=0; j < this->len; i++, j++){
result.str[i] = this->str[j];
}
for(int j=0; j < str.len; i++, j++){
result.str[i] = str.str[j];
}
result.str[i] = '';
return result;
}
Strings Strings::operator= (const Strings& _qstr) {
//Strings* res3 = new Strings();
//res3 = _qstr;
this->str = _qstr.str;
this->len=_qstr.len;
return *this;
}
Strings Strings::operator/ (int n) {
int i,j,k;
k = len; // Первоначально в массиве все элементы.
// k означает количество оставшихся после удаления.
for(i = k-1; i >= 0; i--)
{
if(i%2==0) // условие на удаление элемента массива
{
k--; // уменьшаем количество
for(j = i; j < k; j++) // сдвиг
str[j] = str[j+1];
str[j]='';
}
}
return str;
}
int Strings::Length()
{
int len = 0;
for (len = 0; str[len] != ''; len++);
return len;
}
void Strings::Print()
{
cout<<str<<endl;
}
#include <conio.h>
#include <string.h>
#include <stdio.h>
using namespace std;
class Strings
{
private:
char* str;
int len;
public:
Strings();
Strings(char* s); //конструктор с параметрами
Strings (Strings& s); //конструктор копирования
//const char* GetStr() { return str;} //метод получения строки
Strings operator= (const Strings&); //перегрузка оператора =
Strings operator/ (int); //перегрузка оператора /
Strings operator+ (Strings); //перегрузка оператора +
int Length(); //метод вычисления длинны строки
void Print(); //метод вывода строки
char* Strings::return_str() {return &str[0];}
short Strings::return_size(){return len;}
~Strings() {delete [] str;} //деструктор
};
Strings::Strings() {
str=new char[1];
*str=0;
len=0;
}
Strings::Strings(char* s){
len=strlen(s);
str=new char[len+1]; //инициализация
strcpy(str,s);
}
Strings::Strings(Strings & s)
{
len = s.len;
str = new char[len + 1]; // копирование
for (int i = 0; i < len; i++)
str[i] = s.str[i];
str[len] = '';
};
Strings Strings::operator+ (Strings str) {
Strings result;
//delete result.str;
result.len = this->len + str.len;
result.str = new char [result.len +1];
int i =0;
for(int j=0; j < this->len; i++, j++){
result.str[i] = this->str[j];
}
for(int j=0; j < str.len; i++, j++){
result.str[i] = str.str[j];
}
result.str[i] = '';
return result;
}
Strings Strings::operator= (const Strings& _qstr) {
//Strings* res3 = new Strings();
//res3 = _qstr;
this->str = _qstr.str;
this->len=_qstr.len;
return *this;
}
Strings Strings::operator/ (int n) {
int i,j,k;
k = len; // Первоначально в массиве все элементы.
// k означает количество оставшихся после удаления.
for(i = k-1; i >= 0; i--)
{
if(i%2==0) // условие на удаление элемента массива
{
k--; // уменьшаем количество
for(j = i; j < k; j++) // сдвиг
str[j] = str[j+1];
str[j]='';
}
}
return str;
}
int Strings::Length()
{
int len = 0;
for (len = 0; str[len] != ''; len++);
return len;
}
void Strings::Print()
{
cout<<str<<endl;
}
Код:
- Выложи сперва нормально исходники. Для символа '\0' используй удвоение слеша. от sadovoya, 22 июня 2014 года
Код:
Strings Strings::operator+ (Strings str) {
Strings result;
//delete result.str;
result.len = this->len + str.len;
result.str = new char [result.len +1];
int i =0;
for(int j=0; j < this->len; i++, j++)<<<< ----тут смотри внимательно{
result.str[i] = this->str[j];
}
for(int j=0; j < str.len; i++, j++)<<<< ----и тут смотри внимательно{
result.str[i] = str.str[j];
}
result.str[i] = '';
return result;
}
Strings result;
//delete result.str;
result.len = this->len + str.len;
result.str = new char [result.len +1];
int i =0;
for(int j=0; j < this->len; i++, j++)<<<< ----тут смотри внимательно{
result.str[i] = this->str[j];
}
for(int j=0; j < str.len; i++, j++)<<<< ----и тут смотри внимательно{
result.str[i] = str.str[j];
}
result.str[i] = '';
return result;
}