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

Определить максимальную одинаковую подстроку, принадлежащую двум заданным строкам. Порядок следования букв не меняется. - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 8, средняя оценка - 4.63
greategi
0 / 0 / 0
Регистрация: 13.02.2012
Сообщений: 20
13.05.2012, 16:52     Определить максимальную одинаковую подстроку, принадлежащую двум заданным строкам. Порядок следования букв не меняется. #1
Определить максимальную одинаковую подстроку, принадлежащую двум
заданным строкам. Порядок следования букв не меняется.
INPUT.TXT OUTPUT.TXT
qwerty ---- ert
dertfg

zaqwsx ---- zaqw
cdezaqwerty



Помогите пожалуйста...
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.05.2012, 16:52     Определить максимальную одинаковую подстроку, принадлежащую двум заданным строкам. Порядок следования букв не меняется.
Посмотрите здесь:

C++ Определить строки в файле, содержащие максимальную по длине подстроку-палиндром
C++ Поменять порядок следования массива
C++ Продублировать элементы массива, сохраняя порядок следования
C++ Изменить порядок следования элементов массива
Изменить порядок следования элементов в массиве C++
C++ Сменить порядок следования
C++ Изменить порядок следования элементов массива
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ternsip
 Аватар для Ternsip
660 / 188 / 6
Регистрация: 10.05.2012
Сообщений: 595
13.05.2012, 17:28     Определить максимальную одинаковую подстроку, принадлежащую двум заданным строкам. Порядок следования букв не меняется. #2
=)

Добавлено через 33 минуты
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
#include <stdio.h>
#include <conio.h>
#include <iostream>
#include <cmath>
#include <fstream>
#include <string>
#include <set>
using namespace std;
bool se(string s1,string s2){
    int j=0;
    for (unsigned int i=0;i<s2.length();i++){
        if (j==s1.size()) return 1;
        if (s2[i]==s1[j]) j++;else j=0;
    };
    if (j==s1.size()) return 1;
    return 0;
};
string func(string s1,string s2){
    string maxs="";
    for (unsigned int i=0;i<s1.length();i++){
        string temp="";
        for(unsigned int j=i;j<s1.length();j++){
            temp+=s1[j];
            if (se(temp,s2) && maxs.size()<temp.size()) maxs=temp;
        };
    };
    return maxs;
};
int main(){
    ifstream in("input.txt");
    ofstream out("output.txt");
    string s1,s2;
    in>>s1>>s2;
    out<<func(s1,s2);
    return 0;
}
//Много стараний... прошу плюсик
greategi
0 / 0 / 0
Регистрация: 13.02.2012
Сообщений: 20
13.05.2012, 19:19  [ТС]     Определить максимальную одинаковую подстроку, принадлежащую двум заданным строкам. Порядок следования букв не меняется. #3
Огромное спасибо!Благодарность будет!!!!
Ternsip
 Аватар для Ternsip
660 / 188 / 6
Регистрация: 10.05.2012
Сообщений: 595
13.05.2012, 19:29     Определить максимальную одинаковую подстроку, принадлежащую двум заданным строкам. Порядок следования букв не меняется. #4
Есть баг?
greategi
0 / 0 / 0
Регистрация: 13.02.2012
Сообщений: 20
13.05.2012, 19:30  [ТС]     Определить максимальную одинаковую подстроку, принадлежащую двум заданным строкам. Порядок следования букв не меняется. #5
Все да надо было просто сin i cout mesto in out))
Ternsip
 Аватар для Ternsip
660 / 188 / 6
Регистрация: 10.05.2012
Сообщений: 595
13.05.2012, 19:31     Определить максимальную одинаковую подстроку, принадлежащую двум заданным строкам. Порядок следования букв не меняется. #6
Цитата Сообщение от greategi Посмотреть сообщение
Все да надо было просто сin i cout mesto in out))
Отлично.
greategi
0 / 0 / 0
Регистрация: 13.02.2012
Сообщений: 20
13.05.2012, 19:31  [ТС]     Определить максимальную одинаковую подстроку, принадлежащую двум заданным строкам. Порядок следования букв не меняется. #7
Можешь коментарии дописать к булевой функцыи и к стринг функцыиии! И дай свой вебмани!
Ternsip
 Аватар для Ternsip
660 / 188 / 6
Регистрация: 10.05.2012
Сообщений: 595
13.05.2012, 19:40     Определить максимальную одинаковую подстроку, принадлежащую двум заданным строкам. Порядок следования букв не меняется. #8
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 <stdio.h>
#include <conio.h>
#include <iostream>
#include <cmath>
#include <fstream>
#include <string>
#include <set>
using namespace std;
// функция se возвращает 1 в случае, если s1 является подстрокой s2 и 0 в противном случае
bool se(string s1,string s2){
    int j=0;
    for (unsigned int i=0;i<s2.length();i++){// идём по всем элементам 1-й строки
        if (j==s1.size()) return 1;//если набранный размер достиг размера s1, тогда s1 подстрока s2, вернуть 1 
        if (s2[i]==s1[j]) j++;else j=0;//когда набранные элементы совпадают, увеличиваем счётчик того, сколько мы набрали совпадающих символов подряд
    };
    if (j==s1.size()) return 1;// ещё одна проверка после цикла, т.к j могло увеличиться в i=s2.length()
    return 0;// ну и в случае если мы её не вышли из функции => s1 не подстрока s2
};
//функция находит ответ (строку максимальной длины, которая одновременно является подстрокой обоих строк (s1 и s2))
string func(string s1,string s2){
    string maxs="";// изначально ответ - пустая строка, т.к она является подстрокой обоих и её длина минимальна
    for (unsigned int i=0;i<s1.length();i++){ //идём в цикле по всем символам 1-й строки
        string temp="";
        for(unsigned int j=i;j<s1.length();j++){ //идём в цикле от текущей позиции до конца 1-й строки
            temp+=s1[j];// заносим в конец строки temp значение из 1-й строки
//таким образом мы переберём все варианты подстрок 1-й строки
// далее проверяем если текущая подстрока 1-й строки является подстрокой 2-й, то 
// проверяем если её размер больше, чем тот, что когда либо достигался до неё, тогда поменяем нашу итоговую строку
            if (se(temp,s2) && maxs.size()<temp.size()) maxs=temp;
        };
    };
    return maxs;
};
int main(){
    ifstream in("input.txt");
    ofstream out("output.txt");
    string s1,s2;
    in>>s1>>s2;
    out<<func(s1,s2);
    return 0;
}
greategi
0 / 0 / 0
Регистрация: 13.02.2012
Сообщений: 20
13.05.2012, 19:41  [ТС]     Определить максимальную одинаковую подстроку, принадлежащую двум заданным строкам. Порядок следования букв не меняется. #9
Давай вебмани! )))))
Ternsip
 Аватар для Ternsip
660 / 188 / 6
Регистрация: 10.05.2012
Сообщений: 595
13.05.2012, 19:46     Определить максимальную одинаковую подстроку, принадлежащую двум заданным строкам. Порядок следования букв не меняется. #10
мне не надо денег, уверяю вас
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.05.2012, 19:49     Определить максимальную одинаковую подстроку, принадлежащую двум заданным строкам. Порядок следования букв не меняется.
Еще ссылки по теме:

C++ Изменить порядок следования элементов массива на противоположный
Определить в массиве максимальную серию символов, отличных от букв C++
C++ Перенести все цифры в конец строки, при этом порядок букв не меняется
C++ Поменять порядок следования цифр в числе на обратный
Изменить порядок следования элементов в массиве на обратный C++

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

Или воспользуйтесь поиском по форуму:
greategi
0 / 0 / 0
Регистрация: 13.02.2012
Сообщений: 20
13.05.2012, 19:49  [ТС]     Определить максимальную одинаковую подстроку, принадлежащую двум заданным строкам. Порядок следования букв не меняется. #11
Ну как хочешь ) Просто я так рад ты меня выручил вобще нереально!! Немогбы еше если несоставит труда глянуть ету тему ! Первая прога далжна роботать но там одно но! Точка в Многоугольнике!
Yandex
Объявления
13.05.2012, 19:49     Определить максимальную одинаковую подстроку, принадлежащую двум заданным строкам. Порядок следования букв не меняется.
Ответ Создать тему
Опции темы

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