Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 26, средняя оценка - 4.77
zhenya.ya
1 / 1 / 0
Регистрация: 29.11.2009
Сообщений: 305
#1

Сложение двух строк - C++

06.03.2011, 18:11. Просмотров 3181. Ответов 14
Метки нет (Все метки)

Проблема: не могу получть результат. Что у меня не так?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
class base
{
private:
    char* str;
    int size;
public:
    base( char *str1) 
    { 
        size = strlen(str1);
        str = new char[size+1];
        strcpy(str,str1); 
    }
    ~base()
    {
        size = 0; delete[] str;
    }
        void print() { cout<<str<<endl;}
    base operator + (base bs);
};
 
base base::operator +(base bs)
{
    base result ("            ");
    int length;
    strcpy(result.str,bs.str);
    length = strlen(bs.str);
    memcpy(result.str,str+length,strlen(str));
    result.size= strlen(result.str)+1;
    result.str[result.size] = '\0';
    return (result);
}
 
void main()
{
    base obj1("111"),obj2("222"),obj3("                      ");
    obj3 = obj1 + obj2;
    obj3.print();
    system("pause");
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.03.2011, 18:11
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Сложение двух строк (C++):

Сложение двух строк - C++
Добрый вечер. Написал программу, которая переводит два числа из десятичной в двоичную систему. Необходимо теперь эти два двоичных числа...

Сложение двух строк - C++
вот написал что то вроде так... но не получается... что дополнить или изменить? int _tmain(int argc, _TCHAR* argv) { char a =...

Сделать сложение двух строк - C++
Всем привет. Бьюсь об задачу. Есть два символьных массива с литералами. На выходе необходимо получить ответ. Часть кода //Применить...

Сложение двух строк, ошибки - C++
Подскажите пожалуйста где я допустил ошибки, всё никак программа не заработает. Код: #include &lt;iostream&gt; #include &lt;clocale&gt; ...

Конкатенация двух нибблов (сложение двух полубайт в байт) - C++
Как из этих двух полубайт получить полноценный байт со значение &quot;0x3e&quot;? unsigned char first_nibbl = 0x03 unsigned char last_nibbl =...

Строка: Добавить в строковый класс функцию, которая создает строку, содержащую пересечение двух строк, то есть общие символы для двух строк. - C++
Добавить в строковый класс функцию, которая создает строку, содержащую пересечение двух строк, то есть общие символы для двух строк....

14
IrineK
Заблокирован
06.03.2011, 19:38 #2
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Вот так сумма получается:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
class base
{
private:
        char* str;
        int size;
public:
    base() {};
    base(char *str1) 
        { 
                size = strlen(str1);
                str = new char[size+1];
                strcpy(str,str1); 
        }
        ~base(){}
        void print() { cout<<str<<endl;}
        base operator + (base bs);
};
 
base base::operator +(base bs)
{
        strcat(str,bs.str);
        size= strlen(str);
        return (str);
}
 
void main()
{
    char obj1[80],obj2[80];
    cout<<"Input two lines\n";
    cin.getline(obj1,80);
    cin.getline(obj2,80);
    base s1(obj1),s2(obj2);
    s1.print();
    base s3;
    s3 = s1 + s2;
        s3.print();
    
    system("pause");
}
0
zhenya.ya
1 / 1 / 0
Регистрация: 29.11.2009
Сообщений: 305
06.03.2011, 20:13  [ТС] #3
Даже и так не работает и base s3; (тут ругается на отсутствие конструктора по умолчанию).
0
IrineK
Заблокирован
06.03.2011, 21:12 #4
Вы четко код скопипастили. Там же есть конструктор по умолчанию:
C++
1
base() {};
Пожалуйста, сделайте творчески ^C ^V, а потом уже разбирайтесь.
0
zhenya.ya
1 / 1 / 0
Регистрация: 29.11.2009
Сообщений: 305
06.03.2011, 22:07  [ТС] #5
У меня и с констуктором по умолчанию не работает. Вы же не думаете , что я бы не догадался попробывать его добавить
0
IrineK
Заблокирован
06.03.2011, 22:27 #6
А еще изменились: дестуктор и перегрузка плюса.
0
zhenya.ya
1 / 1 / 0
Регистрация: 29.11.2009
Сообщений: 305
06.03.2011, 22:34  [ТС] #7
Вот!, а на дестр. я то и не обратил внимания. А не могли бы Вы пояснить почему он долже быть именно таким ??
0
IrineK
Заблокирован
06.03.2011, 22:38 #8
Деструктор автоматически запускается каждый раз, когда программа уничтожает объект. Дополнительно стараться не нужно.
1
easybudda
Модератор
Эксперт CЭксперт С++
9680 / 5630 / 954
Регистрация: 25.07.2009
Сообщений: 10,803
07.03.2011, 02:12 #9
Цитата Сообщение от IrineK Посмотреть сообщение
Деструктор автоматически запускается каждый раз, когда программа уничтожает объект. Дополнительно стараться не нужно.
Вот в деструкторе крайне не помешало бы что-то вроде
C++
1
2
3
4
...
if ( str )
  delete [] str;
...
1
rangerx
1935 / 1544 / 141
Регистрация: 31.05.2009
Сообщений: 2,913
07.03.2011, 02:27 #10
Применение delete[] к нулевому указателю абсолютно безопасно. if здесь не нужен. А вот реализовать конструктор копий, и operator= очень бы не помешало.
0
zhenya.ya
1 / 1 / 0
Регистрация: 29.11.2009
Сообщений: 305
08.03.2011, 01:37  [ТС] #11
А у меня не работает если в деструтор забить это. Почему же так?
0
IrineK
Заблокирован
08.03.2011, 03:59 #12
У Праты (глава 11) написано:

delete применять в деструкторе, если new применяется в конструкторе.
Следить, чтобы все конструкторы были совместимы с деструкторами.
Логично.
1
rangerx
1935 / 1544 / 141
Регистрация: 31.05.2009
Сообщений: 2,913
08.03.2011, 09:43 #13
Цитата Сообщение от zhenya.ya Посмотреть сообщение
А у меня не работает если в деструтор забить это. Почему же так?
Цитата Сообщение от rangerx Посмотреть сообщение
А вот реализовать конструктор копий, и operator= очень бы не помешало.
.....
1
zhenya.ya
1 / 1 / 0
Регистрация: 29.11.2009
Сообщений: 305
08.03.2011, 15:39  [ТС] #14
Я попробывал подкорректировать ... насколько неправильно и что?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
class base
{
private:
    char* str;
    int size;
public:
    base(){size = 0; str = 0;}
    base( char *str1) 
    { 
        size = strlen(str1);
        str = new char[size+1];
        strcpy(str,str1); 
    }
    base (const base &bs3);
    ~base()
    {
        if(str)
        delete []str;
    }
        void print() { cout<<str<<endl;}
    base operator + (base bs);
    base operator = (base bs1);
};
 
base base::operator +(base bs)
{
    strcat(str,bs.str);
    size = strlen(str);
    return (str);
}
base base::operator =(base bs1)
{
    size = bs1.size;
    str = bs1.str;
    return (str);
}
base::base(const base &bs3)
{
    size = bs3.size;
    str = new char [ bs3.size ];
    strcpy(str,bs3.str);
}
int main()
{
    char obj1[80],obj2[80];
    try
    {
    cout<<" input:"<<endl;
    cin>>obj1;
    cin>>obj2;
    if(strlen(obj1) >10 || strlen(obj2) >10) throw err("\n leave for boards\n");
    }
catch(err ob)
{
    ob.get_error();
}
base s1(obj1),s2(obj2);
base s3;
    s3 =s1+s2;
    s3.print();
    
    system("pause");
    return 0;
}
0
rangerx
1935 / 1544 / 141
Регистрация: 31.05.2009
Сообщений: 2,913
09.03.2011, 01:24 #15
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
#include <iostream>
#include <cstring>
 
class base
{
    private:
        size_t size_;
        char* data_;
 
    public:
        base()
            : size_(0),
              data_(0)
        {
        }
 
        base(const char* s)
            : size_( strlen(s) ),
              data_(new char[size_ + 1])
        {
            strcpy(data_, s);
        }
 
        base(const base& rhs)
            : size_(rhs.size_),
              data_(new char[size_ + 1])
        {
            strcpy(data_, rhs.data_);
        }
 
        ~base()
        {
            delete[] data_;
        }
 
        void print() const
        {
            std::cout << data_ << std::endl;
        }
 
        const base operator+(const base& rhs) const
        {
            base t;
            t.size_ = size_ + rhs.size_;
            t.data_ = new char[t.size_ + 1];
 
            strcpy(t.data_, data_);
            strcat(t.data_, rhs.data_);
 
            return t;
        }
 
        base& operator=(const base& rhs)
        {
            if(this != &rhs)
            {
                if(size_ != rhs.size_)
                {
                    delete[] data_;
                    size_ = rhs.size_;
                    data_ = new char[rhs.size_ + 1];
                }
 
                strcpy(data_, rhs.data_);
            }
 
            return *this;
        }
};
 
int main()
{
    base b1 = "text1";
    b1.print();
 
    base b2 = "text2";
    b2.print();
 
    base b3(b1 + b2);
    b3.print();
 
    base b4;
    b4 = (b1 + b2 + b3);
    b4.print();
 
    return 0;
}
1
09.03.2011, 01:24
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.03.2011, 01:24
Привет! Вот еще темы с ответами:

Сложение строк - C++
Как сложить 2 строки по символьно ?

Сложение строк - C++
Правильно ли я выполнил сложение строк? выдаёт ошибку что-то #include &lt;stdio.h&gt; #include &lt;string.h&gt; void main() { char...

Сложение строк - C++
смысл программы: вводим с клавиатуры строки....они запихиваются в вектор, когда мы прекращаем ввод они суммируются алгоритмом accumulate()...

Сложение двух чисел - C++
Сложение двух чисел. Как, если оба числа в диапазоне от 0 до 2*10^9 ? Если складывать 2*10^9 + 2*10^9 то long int не справляется((


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru