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

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

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

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

10.06.2010, 16:14. Просмотров 1281. Ответов 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ю, когда дело доходит до умножения программа виснет и выдает ошибку.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.06.2010, 16:14     Добавить в строковый класс функцию
Посмотрите здесь:

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

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

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

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

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

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

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

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
kazak
3034 / 2355 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
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;
}
Crudelis
Шаровик затейник
672 / 414 / 13
Регистрация: 06.05.2010
Сообщений: 1,109
10.06.2010, 21:28  [ТС]     Добавить в строковый класс функцию #3
kazak, благодарю, помогли разобраться

Добавлено через 6 минут
в конце программа выкидывает какую то не понятную ошибку
Crudelis
Шаровик затейник
672 / 414 / 13
Регистрация: 06.05.2010
Сообщений: 1,109
10.06.2010, 21:40  [ТС]     Добавить в строковый класс функцию #4
если нажимать пропустить то тогда срабатывает деструктор
Миниатюры
Добавить в строковый класс функцию  
kazak
3034 / 2355 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
10.06.2010, 23:39     Добавить в строковый класс функцию #5
Цитата Сообщение от Crudelis Посмотреть сообщение
в конце программа выкидывает какую то не понятную ошибку
Какую ошибку?
Crudelis
Шаровик затейник
672 / 414 / 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];
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.01.2014, 01:24     Добавить в строковый класс функцию
Еще ссылки по теме:

Написать функцию (строковый парсер), воспроизводящую работу простейшего калькулятора - C++
В качестве параметра задается строка где a - целое число от 1 до 9, Z - знак * или / Функция анализирует синтаксис строки и в случае...

Написать функцию (строковый парсер), воспроизводящую работу простейшего калькулятора - C++

Объясните, зачем класс мог бы предусматривать для элемента данных set-функцию и get-функцию - C++
Объясните, зачем класс мог бы предусматривать для элемента данных set-функцию и get-функцию.

Добавить класс в программу - C++
С классами совсем не знаком, поэтому обращаюсь к Вам) Требуется присутствие класса в коде. вот сам код: #include&lt;conio.h&gt;...

Добавить производный класс - C++
Помогите добавить в этот код наследование производный класс реализует Уменьшение каждого элемента массива на 20 с использованием...


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

Или воспользуйтесь поиском по форуму:
Boderman
3 / 3 / 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;
}
Yandex
Объявления
07.01.2014, 01:24     Добавить в строковый класс функцию
Ответ Создать тему
Опции темы

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