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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.86
mixon-21
 Аватар для mixon-21
3 / 3 / 0
Регистрация: 05.03.2013
Сообщений: 219
31.07.2013, 15:46     Строка: Добавить в строковый класс функцию, которая создает строку, содержащую пересечение двух строк, то есть общие символы для двух строк. #1
Добавить в строковый класс функцию, которая создает строку, содержащую пересечение двух строк, то есть общие символы для двух строк. Например, результатом пересечения строк "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
#include <iostream>
#include <string>
using namespace std;
class myString
{
private:
    string s1;
public:
    myString();
    myString(string x);
    myString operator+(const myString &b);
    void Display(void);
};
 
myString::myString()
{
}
 
myString::myString(string x)
{
s1=x;
}
 
myString myString::operator+(const myString &b)
{
myString result;
result.s1=s1+b.s1;
return result;
}
 
 
void myString::Display()
{
cout<<s1<<endl;
}
 
void main()
{
myString ekz1("mersedes"),ekz2("porshe"),ekz3=ekz1+ekz2;
ekz3.Display();
system ("color 2");
 
system("pause");
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.07.2013, 15:46     Строка: Добавить в строковый класс функцию, которая создает строку, содержащую пересечение двух строк, то есть общие символы для двух строк.
Посмотрите здесь:

C++ Составить функцию, определяющую тождественность двух данных строк
создать функцию которая формирует строку, включив в нее все совпадающие символы двух строк C++
C++ Найти общие для двух данных строк слова
Сравнить символы двух заданных строк в С++ C++
Матрицы: Написать функцию, которая находит произведение ненулевых элементов двух строк матрицы C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Кудаив
328 / 405 / 24
Регистрация: 27.05.2012
Сообщений: 1,162
Завершенные тесты: 2
31.07.2013, 15:59     Строка: Добавить в строковый класс функцию, которая создает строку, содержащую пересечение двух строк, то есть общие символы для двух строк. #2
Цитата Сообщение от mixon-21 Посмотреть сообщение
Для реализации функции перегрузить оператор *
и где? не выполнено! два, учить домой!

наработки хоть какие нибудь есть?
и какой срам оборачивать std::string! образовательной функции это никакой не несет
Valentina
66 / 66 / 3
Регистрация: 13.05.2012
Сообщений: 130
31.07.2013, 16:40     Строка: Добавить в строковый класс функцию, которая создает строку, содержащую пересечение двух строк, то есть общие символы для двух строк. #3
вот что у меня получилось
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
#include <iostream>
#include <string>
#include <stdio.h>
using namespace std;
class myString
{
private:
    string s1;
public:
    myString();
    myString(string x);
    myString operator+(const myString &b);
    myString operator*(const myString &b);
    void Display(void);
};
 
myString::myString()
{
}
 
myString::myString(string x)
{
s1=x;
}
 
myString myString::operator+(const myString &b)
{
myString result;
result.s1=s1+b.s1;
return result;
}
myString myString::operator*(const myString &b)
{
    myString result;
    const char* first = s1.c_str(), *second = b.s1.c_str(), *p;
    int i=0;
    char ch[100]=" ";
    for ( p = first; *p; ++p )
        if ( strchr(second, *p) )
        {ch[i++]=*p;}
        result.s1=(const char*)ch;
        return result;
}
    
 
 
 
void myString::Display()
{
cout<<s1<<endl;
}
 
void main()
{
myString ekz1("mersedes"),ekz2("porshe"),ekz3=ekz1*ekz2;
ekz3.Display();
system ("color 2");
 
system("pause");
}
mixon-21
 Аватар для mixon-21
3 / 3 / 0
Регистрация: 05.03.2013
Сообщений: 219
31.07.2013, 16:40  [ТС]     Строка: Добавить в строковый класс функцию, которая создает строку, содержащую пересечение двух строк, то есть общие символы для двух строк. #4
Цитата Сообщение от Кудаив Посмотреть сообщение
и где? не выполнено! два, учить домой!

наработки хоть какие нибудь есть?
и какой срам оборачивать std::string! образовательной функции это никакой не несет
так подскажи
Кудаив
328 / 405 / 24
Регистрация: 27.05.2012
Сообщений: 1,162
Завершенные тесты: 2
31.07.2013, 17:23     Строка: Добавить в строковый класс функцию, которая создает строку, содержащую пересечение двух строк, то есть общие символы для двух строк. #5
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
#include <cstring>
 
class myString
{
private:
    char*    m_array;
    unsigned m_size;
public:
    myString();
    myString(const char* x);
    myString operator+(const myString &b);
    void Display(void);
};
 
myString::myString()
{
    m_array = new char[10];
    m_array[0] = '\0';
    m_size = 0; 
}
 
myString::~myString
{
   delete[] m_array;
}
 
myString::myString(const char*str)
{
    if(strlen(str) > m_size)
    {
       delete[] m_array;
       m_size = strlen(str);
       m_array = new char[m_size + 1];
       strcpy(m_array, str);
    }
    else
    {
        strcpy(m_array, str);
        m_size = strlen(str);
    }
}
и в таком духе
Cerbery-San
1 / 1 / 0
Регистрация: 23.07.2013
Сообщений: 24
31.07.2013, 18:02     Строка: Добавить в строковый класс функцию, которая создает строку, содержащую пересечение двух строк, то есть общие символы для двух строк. #6
Вот еще 2 варианта реализации

При таком подходе порядок следования совместных символов не соблюдается
C#
1
2
3
4
5
6
7
8
9
10
11
12
#include <algorithm>
#include <iterator>
 
myString myString::operator*(const myString &b)
{
    sort(s1.begin(), s1.end());
    sort(b.s1.begin(), b.s1.end());
    myString result;
    set_intersection(s1.begin(), s1.end(), b.s1.begin(), b.s1.end(),
                     inserter(result.s1, result.s1.begin()));
    return result;
}
Так соблюдается
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
myString myString::operator*(const myString &b)
{
    myString result;
    for (int i=0; i<s1.length(); ++i)
    {
        for (int j=0; j<b.s1.length(); ++j)
        {
            if  (s1[i] == b.s1[j])
                result.s1+=s1[i];
        }
    }
    return result;
}
Внимание код не компилил! Набросал по бырому
salam
157 / 138 / 11
Регистрация: 10.07.2012
Сообщений: 709
01.08.2013, 08:11     Строка: Добавить в строковый класс функцию, которая создает строку, содержащую пересечение двух строк, то есть общие символы для двух строк. #7
Цитата Сообщение от mixon-21 Посмотреть сообщение
Например, результатом пересечения строк "sdqcg" "rgfas34" будет строка "sg".
не совсем понятно, по какому принципу строится это пересечение...
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11822 / 6801 / 769
Регистрация: 27.09.2012
Сообщений: 16,869
Записей в блоге: 2
Завершенные тесты: 1
01.08.2013, 08:16     Строка: Добавить в строковый класс функцию, которая создает строку, содержащую пересечение двух строк, то есть общие символы для двух строк. #8
Цитата Сообщение от salam Посмотреть сообщение
не совсем понятно, по какому принципу строится это пересечение...
Цитата Сообщение от mixon-21 Посмотреть сообщение
"sdqcg" "rgfas34" будет строка "sg"
множество же
salam
157 / 138 / 11
Регистрация: 10.07.2012
Сообщений: 709
01.08.2013, 08:58     Строка: Добавить в строковый класс функцию, которая создает строку, содержащую пересечение двух строк, то есть общие символы для двух строк. #9
Цитата Сообщение от Croessmah Посмотреть сообщение
множество же
конкретизирую: почему "sg", а не "gs"?
Wolkodav
 Аватар для Wolkodav
599 / 452 / 32
Регистрация: 18.09.2012
Сообщений: 1,685
01.08.2013, 09:28     Строка: Добавить в строковый класс функцию, которая создает строку, содержащую пересечение двух строк, то есть общие символы для двух строк. #10
Кудаив, а у вас компилируется код? Меня просто немного смущает тип 'unsigned'. Наверное вы имели ввиду unsigned int?
Кудаив
328 / 405 / 24
Регистрация: 27.05.2012
Сообщений: 1,162
Завершенные тесты: 2
01.08.2013, 15:15     Строка: Добавить в строковый класс функцию, которая создает строку, содержащую пересечение двух строк, то есть общие символы для двух строк. #11
Wolkodav,
C++
1
2
3
4
5
6
7
8
#include <iostream>
 
int main()
{
    unsigned i = 42;
    std::cout << i << std::endl;
    return 0;
}
что unsigned, что unsigned int
Wolkodav
 Аватар для Wolkodav
599 / 452 / 32
Регистрация: 18.09.2012
Сообщений: 1,685
01.08.2013, 15:49     Строка: Добавить в строковый класс функцию, которая создает строку, содержащую пересечение двух строк, то есть общие символы для двух строк. #12
Кудаив, ладно.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.07.2014, 16:36     Строка: Добавить в строковый класс функцию, которая создает строку, содержащую пересечение двух строк, то есть общие символы для двух строк.
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
HEEEELP
Сообщений: n/a
03.07.2014, 16:36     Строка: Добавить в строковый класс функцию, которая создает строку, содержащую пересечение двух строк, то есть общие символы для двух строк. #13
valentina, а можно минимальные комменты к коду? плиз)))
Yandex
Объявления
03.07.2014, 16:36     Строка: Добавить в строковый класс функцию, которая создает строку, содержащую пересечение двух строк, то есть общие символы для двух строк.
Ответ Создать тему
Опции темы

Текущее время: 05:22. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru