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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.90
Crudelis
Шаровик затейник
678 / 427 / 13
Регистрация: 06.05.2010
Сообщений: 1,109
#1

Добавить в строковый класс функцию - C++

10.06.2010, 16:14. Просмотров 1378. Ответов 6
Метки нет (Все метки)

Добавить в строковый класс функцию, которая создает строку,
содержащую пересечение двух строк, то есть общие символы для двух строк.
Например, результатом пересечения строк "sdqcg" "rgfas34" будет строка "sg".
Для реализации функции перегрузить оператор * (бинарное умножение).
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
#include<iostream>
using namespace std;
class String
{
    char *str1;
    char *str3;
    int len;    
public:
    String(){};
    ~String()
    {
        delete [] str1;
        delete [] str3;
    }
    void Inps1();
    String& operator *(String &N);
    String& operator =(String &N);
    void Showrez();
 
};
void String::Inps1()
{
    char a[256];
    gets(a);
    len=strlen(a)+1;
    str1 = new char[len];
    strcpy(str1,a);
}
String& String:: operator *(String &N)
{
    int tem=1;
    len=strlen(str1)+1;
    N.len=strlen(N.str1)+1;
    for(int i=0;i<len;i++)
    {
        for(int j=0;j<N.len;j++)
        {
            if(str1[i]==N.str1[i])
                tem++;
        }
    }
    str3 = new char[tem];
    for(int i=0;i<len;i++)
    {
        for(int j=0;j<N.len;j++)
        {
            if(str1[i]==N.str1[j])
                strncat(str3,str1[i],1);
        }
    }
    return *this;
}
String& String:: operator =(String &N)
{
    strcpy(str1,N.str1);
    strcpy(str3,N.str3);
    len=N.len;
    return *this;
}
void String::Showrez()
{
    cout<<"Результат умножения двух строк: "<<str3<<endl;
}
void main()
{
    setlocale(LC_CTYPE,"Rus");
    String A,B,C;
    cout<<"Введите первую строку\n";
    A.Inps1();
    cout<<"Введите вторую строку\n";
    B.Inps1();
    C=A*B;
    C.Showrez();
    cout<<endl;
}
Что за ошибка, помогите пожалуйста:
error C2664: strncat: невозможно преобразовать параметр 2 из 'char' в 'const char *'
Для преобразования из целого типа в указатель требуется reinterpret_cast, приведение в стиле С или приведение в стиле функции
Если прописать strncat(str3,&str1[i],1); то ошибок нет, но вот работа программы:
ввожу 1ю строку, ввожу 2ю, когда дело доходит до умножения программа виснет и выдает ошибку.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.06.2010, 16:14
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Добавить в строковый класс функцию (C++):

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

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

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

Добавить функцию в класс ifstream - C++
имеется функция: bool Str(ifstream &amp;f, const char *s) { char buff; return !(f.get(buff,...

Как добавить функцию в класс - C++
Например у меня есть функция void Circle(HDC h, int R, int X, int Y) И мне ее нужно добавить в класс. Но эти параметры (HDC h,...

Как добавить дружественную функцию в класс - C++
Написал код, а как добавить функцию friend? #include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;stdio.h&gt; using namespace std; ...

6
kazak
3057 / 2378 / 160
Регистрация: 11.03.2009
Сообщений: 5,438
Завершенные тесты: 1
10.06.2010, 17:35 #2
Цитата Сообщение от Crudelis Посмотреть сообщение
ввожу 1ю строку, ввожу 2ю, когда дело доходит до умножения программа виснет и выдает ошибку.
После str3 = new char[tem]; добавь str[0] = '\0';

Добавлено через 9 минут
Вот убрал ошибки в твоем классе
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
class String
{
        char *str1;
        char *str3;
        int len;
public:
        String(){str1 = NULL; str3 = NULL;}
        ~String()
        {
             if (str1)
             {
                delete [] str1;
                str1 = NULL;
             }
             if (str3)
             {
                delete [] str3;
                str3 = NULL;
             }
        }
        void Inps1();
        String& operator *(String &N);
        String& operator =(String &N);
        void Showrez();
 
};
void String::Inps1()
{
        char a[256];
        gets(a);
        len=strlen(a)+1;
        str1 = new char[len];
        strcpy(str1,a);
}
String& String:: operator *(String &N)
{
        int tem=1;
        len=strlen(str1)+1;
        N.len=strlen(N.str1)+1;
        for(int i=0;i<len;i++)
        {
                for(int j=0;j<N.len;j++)
                {
                        if(str1[i]==N.str1[i])
                                tem++;
                }
        }
        str3 = new char[tem];
        str3[0] = '\0';
        for(int i=0;i<len;i++)
        {
                for(int j=0;j<N.len;j++)
                {
                        if(str1[i]==N.str1[j])
                                strncat(str3,&str1[i],1);
                }
        }
        return *this;
}
String& String:: operator =(String &N)
{
        if (str1)
           delete [] str1;
        if (str3)
           delete [] str3;
        str1 = new char[strlen(N.str1+1)];
        str3 = new char[strlen(N.str3+1)];
        strcpy(str1,N.str1);
        strcpy(str3,N.str3);
        len=N.len;
        return *this;
}
2
Crudelis
Шаровик затейник
678 / 427 / 13
Регистрация: 06.05.2010
Сообщений: 1,109
10.06.2010, 21:28  [ТС] #3
kazak, благодарю, помогли разобраться

Добавлено через 6 минут
в конце программа выкидывает какую то не понятную ошибку
0
Crudelis
Шаровик затейник
678 / 427 / 13
Регистрация: 06.05.2010
Сообщений: 1,109
10.06.2010, 21:40  [ТС] #4
если нажимать пропустить то тогда срабатывает деструктор
1
Миниатюры
Добавить в строковый класс функцию  
kazak
3057 / 2378 / 160
Регистрация: 11.03.2009
Сообщений: 5,438
Завершенные тесты: 1
10.06.2010, 23:39 #5
Цитата Сообщение от Crudelis Посмотреть сообщение
в конце программа выкидывает какую то не понятную ошибку
Какую ошибку?
0
Crudelis
Шаровик затейник
678 / 427 / 13
Регистрация: 06.05.2010
Сообщений: 1,109
11.06.2010, 00:49  [ТС] #6
kazak, уже разобрался, было не правильно созданы str1 и str3
я изменил на:
C++
1
2
        str1 = new char[strlen(N.str1)+1];
        str3 = new char[strlen(N.str3)+1];
1
Boderman
4 / 4 / 3
Регистрация: 25.03.2013
Сообщений: 140
07.01.2014, 01:24 #7
Также ошибка в указании размерности для str3 в перегрузке умножения !

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
String& String:: operator *(String &N)
{
        int tem=1;
        len=strlen(str1)+1;
        N.len=strlen(N.str1)+1;
        for(int i=0;i<len;i++)
        {
                for(int j=0;j<N.len;j++)
                {
                        if(str1[i]==N.str1[i])
                                tem++;
                }
        }
        str3 = new char[tem+2];
        str3[0] = '\0';
        for(int i=0;i<len;i++)
        {
                for(int j=0;j<N.len;j++)
                {
                        if(str1[i]==N.str1[j])
                        {
                            strncat(str3,&str1[i],1);
                        
                        }
                }
        }
        return *this;
}
0
07.01.2014, 01:24
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.01.2014, 01:24
Привет! Вот еще темы с ответами:

Добавить в класс Student функцию-член класса - C++
Добавить в класс Student функцию-член класса, определяющую, получает ли студент стипендию, и в головной программе организовать подсчёт...

Строковый класс - C++
Ребят, помогите решить пожалуйста... Написать программу для работы с строковым классом. В классе предусмотреть все основные операции...

Добавить функцию удаления в класс "Очередь" - C++
Подскажите как реализовать функцию удаления(popQueue)? //queue.h #include &lt;iostream&gt; #include &lt;iomanip&gt; using namespace std; ...

Создать строковый шаблонный класс String - C++
Сделайте класс String шаблонным. В исходном классе замените конструктор с 1 параметром на конструктор с 2 параметрами (указатель на массив...


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

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

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