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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.86
mixon-21
3 / 3 / 0
Регистрация: 05.03.2013
Сообщений: 219
#1

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

31.07.2013, 15:46. Просмотров 2234. Ответов 12
Метки нет (Все метки)

Добавить в строковый класс функцию, которая создает строку, содержащую пересечение двух строк, то есть общие символы для двух строк. Например, результатом пересечения строк "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");
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.07.2013, 15:46
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Строка: Добавить в строковый класс функцию, которая создает строку, содержащую пересечение двух строк, то есть общие символы для двух строк. (C++):

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

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

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

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

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

Найти общие для двух заданных строк слова, и вывести их на экран - C++
Задание: &quot;/*С клавиатуры вводятся две строки, содержащие некоторые слова, перечисленные через точку с запятой. Найти общие для этих...

12
Кудаив
329 / 406 / 24
Регистрация: 27.05.2012
Сообщений: 1,168
Завершенные тесты: 2
31.07.2013, 15:59 #2
Цитата Сообщение от mixon-21 Посмотреть сообщение
Для реализации функции перегрузить оператор *
и где? не выполнено! два, учить домой!

наработки хоть какие нибудь есть?
и какой срам оборачивать std::string! образовательной функции это никакой не несет
0
Valentina
68 / 68 / 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");
}
3
mixon-21
3 / 3 / 0
Регистрация: 05.03.2013
Сообщений: 219
31.07.2013, 16:40  [ТС] #4
Цитата Сообщение от Кудаив Посмотреть сообщение
и где? не выполнено! два, учить домой!

наработки хоть какие нибудь есть?
и какой срам оборачивать std::string! образовательной функции это никакой не несет
так подскажи
0
Кудаив
329 / 406 / 24
Регистрация: 27.05.2012
Сообщений: 1,168
Завершенные тесты: 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);
    }
}
и в таком духе
1
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;
}
Внимание код не компилил! Набросал по бырому
1
salam
165 / 146 / 14
Регистрация: 10.07.2012
Сообщений: 738
01.08.2013, 08:11 #7
Цитата Сообщение от mixon-21 Посмотреть сообщение
Например, результатом пересечения строк "sdqcg" "rgfas34" будет строка "sg".
не совсем понятно, по какому принципу строится это пересечение...
0
Croessmah
Эксперт CЭксперт С++
13513 / 7671 / 866
Регистрация: 27.09.2012
Сообщений: 18,876
Записей в блоге: 3
Завершенные тесты: 1
01.08.2013, 08:16 #8
Цитата Сообщение от salam Посмотреть сообщение
не совсем понятно, по какому принципу строится это пересечение...
Цитата Сообщение от mixon-21 Посмотреть сообщение
"sdqcg" "rgfas34" будет строка "sg"
множество же
0
salam
165 / 146 / 14
Регистрация: 10.07.2012
Сообщений: 738
01.08.2013, 08:58 #9
Цитата Сообщение от Croessmah Посмотреть сообщение
множество же
конкретизирую: почему "sg", а не "gs"?
0
Wolkodav
604 / 457 / 32
Регистрация: 18.09.2012
Сообщений: 1,685
01.08.2013, 09:28 #10
Кудаив, а у вас компилируется код? Меня просто немного смущает тип 'unsigned'. Наверное вы имели ввиду unsigned int?
0
Кудаив
329 / 406 / 24
Регистрация: 27.05.2012
Сообщений: 1,168
Завершенные тесты: 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
0
Wolkodav
604 / 457 / 32
Регистрация: 18.09.2012
Сообщений: 1,685
01.08.2013, 15:49 #12
Кудаив, ладно.
0
HEEEELP
Сообщений: n/a
03.07.2014, 16:36 #13
valentina, а можно минимальные комменты к коду? плиз)))
03.07.2014, 16:36
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.07.2014, 16:36
Привет! Вот еще темы с ответами:

Матрицы: Написать функцию, которая находит произведение ненулевых элементов двух строк матрицы - C++
Задание: В предлагаемых вариантах необходимо написать и протестировать отдельные функции для работы с матрицами, в том числе и функцию...

Сравнить символы двух заданных строк в С++ - C++
Помогите пожалуйста с написанием в С++. Мучаюсь уже 3 часа, вообще ничего не выходит. Вот задание: Сравнить символы двух заданных...

Реализовать функцию конкатенации двух строк - C++
Вам требуется реализовать функцию конкатенации (склейки) двух C-style строк. Функция конкатенации принимает на вход две C-style строки и...

Составить функцию конкатенации (слияния) двух строк - C++
составить функцию конкатенации (слияния) двух строк.в основной програме использовать эту функцию для слияния четырех строк.


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

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

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