Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: 6462
Последний выпуск: 19.06.2015

Нужна помощь! Класс Строка, осталась одна ошибка :(

93K
22 июня 2014 года
m_satira
1 / / 22.06.2014
Помогите пожалуйста, не работает перегрузка оператора сложение. На консоль выводит мусор. Никак не могу сдать из-за этого курсовую :( Задание:
Класс строки: значение строки,конструктор по умолчанию, конструктор копирования, конструктор с параметрами, метод вычисления длинны строки, метод вывода строки, перегрузка операторов деления, присваивания, сложения.
Описать класс, три объекта 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;   
}
main.cpp


Код:
#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;   
}
  • Выложи сперва нормально исходники. Для символа '\0' используй удвоение слеша. от sadovoya, 22 июня 2014 года
1.8K
23 июня 2014 года
Kuzya
184 / / 19.03.2008
Код:
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;
}

Знаете кого-то, кто может ответить? Поделитесь с ним ссылкой.

Ваш ответ

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог