Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/13: Рейтинг темы: голосов - 13, средняя оценка - 4.92
Шаровик затейник
 Аватар для Crudelis
696 / 445 / 78
Регистрация: 06.05.2010
Сообщений: 1,109

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

10.06.2010, 16:14. Показов 2488. Ответов 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
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.06.2010, 16:14
Ответы с готовыми решениями:

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

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

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

6
 Аватар для kazak
3602 / 2743 / 355
Регистрация: 11.03.2009
Сообщений: 6,304
10.06.2010, 17:35
Цитата Сообщение от 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
696 / 445 / 78
Регистрация: 06.05.2010
Сообщений: 1,109
10.06.2010, 21:28  [ТС]
kazak, благодарю, помогли разобраться

Добавлено через 6 минут
в конце программа выкидывает какую то не понятную ошибку
0
Шаровик затейник
 Аватар для Crudelis
696 / 445 / 78
Регистрация: 06.05.2010
Сообщений: 1,109
10.06.2010, 21:40  [ТС]
если нажимать пропустить то тогда срабатывает деструктор
Миниатюры
Добавить в строковый класс функцию  
1
 Аватар для kazak
3602 / 2743 / 355
Регистрация: 11.03.2009
Сообщений: 6,304
10.06.2010, 23:39
Цитата Сообщение от Crudelis Посмотреть сообщение
в конце программа выкидывает какую то не понятную ошибку
Какую ошибку?
0
Шаровик затейник
 Аватар для Crudelis
696 / 445 / 78
Регистрация: 06.05.2010
Сообщений: 1,109
11.06.2010, 00:49  [ТС]
kazak, уже разобрался, было не правильно созданы str1 и str3
я изменил на:
C++
1
2
        str1 = new char[strlen(N.str1)+1];
        str3 = new char[strlen(N.str3)+1];
1
 Аватар для Boderman
4 / 4 / 4
Регистрация: 25.03.2013
Сообщений: 140
07.01.2014, 01:24
Также ошибка в указании размерности для 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.01.2014, 01:24
Помогаю со студенческими работами здесь

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

Добавить дружественную функцию в класс
Есть сделанный класс по условию: Создать класс &quot;шар&quot; по таким условиям: а) его экземпляр содержит размер радиуса. b) его конструктор...

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

Добавить функцию в класс существующий в Builder
Добрый день. Подскажите пожалуйста, возможно ли добавить свою функцию в имеющийся класс, например в TStringGrid. Что для этого нужно...

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


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru