Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Torotorkina
1 / 1 / 0
Регистрация: 10.04.2016
Сообщений: 29
#1

Найти самое длинное слово, которое встречаеться в двух строках - C++

07.05.2016, 14:25. Просмотров 202. Ответов 2

Помогите пожалуйста!
Задание : дано две строки. Найти самое длинное слово, которое встречаеться в обоих строках.
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.05.2016, 14:25
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Найти самое длинное слово, которое встречаеться в двух строках (C++):

Найти в тексте самое длинное слово, которое состоит из цифр
найти самое длинное слово в тексте которое состоит из цифр

Найти самое длинное слово, которое содержит изображение десятичного числа
В тексте найти самое длинное слово которое содержит изображение десятичного...

Строки. В заданном тексте найти самое длинное слово и самое длинное предложение.
Задача: В заданном тексте найти самое длинное слово и самое длинное...

Найти самое длинное общее слово двух заданных предложений
Помогите, пожалуйста, написать программу которая будет находить самое длинное...

Найти самое длинное общее слово для двух заданных текстов
Найти самое длинное общее слово для двух заданных текстов..причем вводимый...

Найти самое длинное слово, которое заканчивается на "н"
Дана строка текста, в которой слова разделены пробелами и запятыми. Необходимо:...

2
Геомеханик
785 / 592 / 937
Регистрация: 26.06.2015
Сообщений: 1,409
07.05.2016, 19:33 #2
Лучший ответ Сообщение было отмечено Torotorkina как решение

Решение

Вот набросал.
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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
#include <iostream>
#include <queue>
#include <cstring>
#include <algorithm>
#include <iterator>
struct strptr;
typedef std::priority_queue<strptr> pqueue;
void put_words(pqueue& pq, const char* s, const char* delim);
bool out_share_words(std::ostream& _out, pqueue& pq1, pqueue& pq2);
 
struct strptr {
    const char* ptr;
    int len;
 
    strptr(void):ptr(NULL), len(0){}
    strptr(const char* _p, int _n):ptr(_p), len(_n){}
 
    bool operator < (const strptr& p) const {
        return ((len  < p.len) || 
               ((len == p.len) && std::lexicographical_compare(p.ptr, p.end(), ptr, ptr + len)));
    }
 
    const char* begin(void) const { return ptr; }
    const char* end(void)   const { return ptr + len; }
};
 
 
int main(void){
    char s1[] = "AAAA, BBBB, XXXX, ABCD, D, EEEE, F...QQQQ";
    char s2[] = "EEEE, QQQQ, Z, X, YY. ABCD, AAAA";
 
    pqueue pq1, pq2;
    put_words(pq1, s1, " \n\t.,");
    put_words(pq2, s2, " \n\t.,");
 
    if(! out_share_words(std::cout, pq1, pq2))
        std::cout << "Not find!" << std::endl;
    return 0;
}
 
//вывод самых длинных общих слов
bool out_share_words(std::ostream& _out, pqueue& pq1, pqueue& pq2){
    std::ostream_iterator<char> _osrt(_out, "");
    if(pq1.empty() || pq2.empty())
        return false;
 
    int n = pq1.top().len;
    if(n != pq2.top().len)
        return false;
 
    bool ok = false;
    while(!pq1.empty() && !pq2.empty()){
        if((pq1.top().len != n) || (pq2.top().len != n))
            break;
 
        const strptr& a = pq1.top();
        const strptr& b = pq2.top();
        if(std::lexicographical_compare(a.begin(), a.end(), b.begin(), b.end()))
            pq1.pop();
        else {
            if(! memcmp(a.begin(), b.begin(), b.len)){
                std::copy(a.begin(), a.end(), _osrt);
                std::cout << std::endl;
                ok = true;
                pq1.pop();
            }
            pq2.pop();
        }
    }
    return ok;
}
 
//слова
void put_words(pqueue& pq, const char* s, const char* delim){
    int n, m = 0;
    const char* p = s;
    while((s = strpbrk(s, delim)) != NULL){
        n = (int)(s - p);
        if((n > 0) && (n >= m)){
            m = n;
            pq.push(strptr(p, n));
        }
 
        while(*s && (strchr(delim, *s) != NULL))
            ++s;
        p = s;
    }
 
    if(*p){
        for(s = p; *s; ++s)
            ;
        if(((n = (int)(s - p)) > 0) && (n >= m))
            pq.push(strptr(p, n));
    }
}
Пример работы кода
0
Torotorkina
1 / 1 / 0
Регистрация: 10.04.2016
Сообщений: 29
07.05.2016, 19:40  [ТС] #3
Спасибо, но не могли бы вы набросать вариант попроще? Просто мы только начинаем учить строки и для меня сдесь много чего непонятного.
Как нам сказали, то мы должны использовать только файл string.h.
Спасибо за понимание.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.05.2016, 19:40
Привет! Вот еще темы с решениями:

Найти в тексте самое длинное слово и самое длинное предложение
вписать текст с клавиатуры и найти в этом тексте самое длинное слово и самое...

Вывести самое длинное слово строки, которое состоит из одних цифр
Ввести строку з клавиатури и вивести самое длиное слово которое составляют одни...

В заданном предложении найти самое короткое и самое длинное слово
Строка вводится с клавиатуры. Нужно выполнить задание, не применяя функций...

Найти самое длинное и самое короткое слово в тексте
Всем доброго времени суток! В моем задание нужно найти самое длинное и самое...


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

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

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