Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
4 / 2 / 2
Регистрация: 23.10.2018
Сообщений: 59
1

Сделать конкатенацию двух вводимых строк с помошью функции-члена

15.03.2019, 15:53. Просмотров 990. Ответов 1


В коде ошибка в том, что после плюса программа перестаёт работать, предположительно, из-за того, что не видит ноль в конце строки. Можно убрать оператор + и сделать вместо него функцию
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
void strcat(char *to, const char *from)
{
    while(*to != 0) ++to;
    do {
        *to = *from;
    } while(++to, *from++ != 0);
}
которая будет складывать строки(надо сделать чтобы ещё и выводила) потому что просто strcat не работает на класс string_ Сам код:
Кликните здесь для просмотра всего текста
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
#define _CRT_SECURE_NO_WARNINGS
#include <windows.h>
#include <iostream>
#include <string>
using namespace std;
 
class string_
{
private:
    char *strings;
    int len;
public:
    string_()
    {
        len = 81;
        strings = new char[len];
        strcpy(strings, strings);
    }
    string_(int len)
    {
        strings = new char[len + 1];
        strcpy(strings, strings);
    }
    string_(const char* string)
    {
        strings = new char[strlen(strings) + 1];
        strcpy(strings, string);
    }
    string_(const string_ &news)
    {
        strings = new char[strlen(strings) + 1];
        strcpy(strings, news.strings);
    }
    ~string_()
    {
        delete[] strings;
    }
 
    string_& operator + (const string_& right)
    {
        string_ result(strcat(strings, right.strings));
        return *this;
    }
 
    friend istream& operator >> (istream& stream, string_& orig);
    friend ostream& operator << (ostream& stream, const string_& orig);
};
 
istream& operator >> (istream& stream, string_& orig)
{
    stream >> orig.strings;
    return stream;
}
 
ostream& operator << (ostream& stream, const string_& orig)
{
    stream << orig.strings;
    return stream;
}
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    setlocale(LC_ALL, "rus");
    string_ string1, string2(80);
 
    cout << "введите первую строку: ";
    cin >> string1;
 
    cout << "введите вторую строку: ";
    cin >> string2;
 
    cout << string1 << " + " << string2;
    string1 + string2;
    cout << " = " << string1 << endl;
 
    return 0;
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.03.2019, 15:53
Ответы с готовыми решениями:

Получить строку, представляющую собой конкатенацию двух строк. Определить длину строки
Динамические строки и массивы строк Получить строку, представляющую собой конкатенацию двух...

Получить строку, представляющую собой конкатенацию двух строк. Определить длину строки. Сравнить эти строки
Динамические строки и массивы строк Получить строку, представляющую собой конкатенацию двух...

С помошью одной функции посчитать результат для двух классов
//С помощью функции friend obrab подсчитать сумму матрицы и массива. Ошибки выдаёт не опйму почему....

Как сделать конкатенацию двух строк
Объясните пожалуйста как сделать конкатенацию 2-х строк. И если можете приведите примеры, заранее...

__________________
Помогаю в написании курсовых работ и дипломов здесь.
Записывайтесь на профессиональные курсы C++ разработчиков
1
3984 / 2251 / 936
Регистрация: 07.02.2019
Сообщений: 5,914
15.03.2019, 18:12 2
Лучший ответ Сообщение было отмечено Sir9000 как решение

Решение

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
88
89
90
91
92
93
#define _CRT_SECURE_NO_WARNINGS
#include <windows.h>
#include <iostream>
#include <string>
using namespace std;
 
class string_
{
private:
    char *strings;
    int len;
public:
    string_():strings(0), len(0){}
    
    string_(int _len)
    {
        len=_len;
        strings = new char[len + 1];
        for(int i(0); i<len+1; ++i) strings[i]=0;
    }
    string_(const char* string)
    {
        len=strlen(string);
        strings = new char[len + 1];
        strcpy(strings, string);
    }
    string_(const string_ &news)
    {
        len=news.len;
        strings = new char[len + 1];
        strcpy(strings, news.strings);
    }
    string_& operator=(const string_& string)
    {
        delete[] strings;
        len=string.len;
        strings = new char[len + 1];
        strcpy(strings, string.strings);
        return *this;
    }
    ~string_()
    {
        delete[] strings;
    }
 
    string_ operator + (const string_& right)
    {
        len+=right.len;
        char* temp=new char[len+1];
        strcpy(temp, strings);
        delete[] strings;
        strings=temp;
        strcat(strings, right.strings);
        return *this;
    }
 
    friend istream& operator >> (istream& stream, string_& orig);
    friend ostream& operator << (ostream& stream, const string_& orig);
};
 
istream& operator >> (istream& stream, string_& orig)
{
    char buff[2048];
    stream.getline(buff,2048);
    orig=string_(buff);
    return stream;
}
 
ostream& operator << (ostream& stream, const string_& orig)
{
    stream << orig.strings;
    return stream;
}
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    setlocale(LC_ALL, "rus");
    string_ string1, string2(80);
 
    cout << "введите первую строку: ";
    cin >> string1;
 
    cout << "введите вторую строку: ";
    cin >> string2;
 
    cout << string1 << " + " << string2;
    string1 = string1 + string2;
    cout << " = " << string1 << endl;
 
    return 0;
}
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.03.2019, 18:12

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь или здесь.

Как сделать конкатенацию двух строк, введенных с клавиатуры?
или хотя б как узнать реальную длину строки после ввода? enter там будет? можна узнать длину если...

Из двух вводимых с клавиатуры строк создать третью
Помогите со следующей программой: Из двух вводимых с клавиатуры строк, состоящих только из слов,...

Из двух строк сделать одну, в которой поочередно будут символы двух строк
Из двух строк сделать одну, в котором поочередно будут символы двух строк.

даны 2 последовательности в файлах, в двух разных, нужно их обьединить и отсортировать по возрастанию. Но нужно сделать прогу с помошью указателей
вот текст проги которую я сделал, но без указателей. переделайте пожалуйста #include&lt;fstream.h&gt; ...


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

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

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