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

Вывести два предложения и распечатать самые длинные слова, общие для этих предложений - C++

Войти
Регистрация
Восстановить пароль
 
Lily_J
0 / 0 / 0
Регистрация: 21.05.2013
Сообщений: 3
21.05.2013, 21:07     Вывести два предложения и распечатать самые длинные слова, общие для этих предложений #1
Здравствуйте.

Мне необходима помощь (консультация) на счёт задачи:

Вывести два предложения и распечатать самые длинные слова, общие для этих предложений. Если нужных слов нет-сообщить об этом.

Как можно найти одинаковые слова в этих двух предложениях?
Заранее спасибо!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.05.2013, 21:07     Вывести два предложения и распечатать самые длинные слова, общие для этих предложений
Посмотрите здесь:

За один просмотр символов строки найти все самые длинные слова, символы в которых идут в строгом возрастании кодов C++
Вывести на экран слова начинающиеся с той же буквы, что и первое слово предложения. Напечатать строку после изъятия этих слов. C++
C++ В текстовом файле найти самые длинные и самые короткие слова и удалить их из файла.
C++ Даны два предложения. Найти самое короткое из слов первого предложения,которого нет во втором предложений?
в C++ Даны два слова.Вывести все общие буквы этих слов по одному разу. C++
C++ Переставить слова заданного предложения в соответствии с ростом согласных в этих словах.
C++ Вывести слова данного предложения, которые отличны от последнего слова
C++ Распечатать, начиная с последнего, перевернутые слова введенного предложения
C++ В символьной строке определить количество и вывести все самые длинные слова
Сравнить два предложения и вывести на экран одинаковые буквы этих предложений C++
Вывести самые длинные слова из файла C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Miwa123
37 / 37 / 1
Регистрация: 16.04.2013
Сообщений: 317
Записей в блоге: 1
21.05.2013, 22:41     Вывести два предложения и распечатать самые длинные слова, общие для этих предложений #2
находишь положение самого длинного слова в 1ом предложение, а это легко: инкрементируешь счетчик пока встречаются символы. обнуляешь когда встречается пробел, при обнулении сравниваешь больше ли предыдущий счетчик. если да - переприсваиваешь. и главное при проходе по строке надо не забывать про общий счетчик символов строки(для того чтобы потом узнать начало самого длинного слова). со вторым предложением тоже самое. и потом сравнишь эти 2 слова
Lily_J
0 / 0 / 0
Регистрация: 21.05.2013
Сообщений: 3
22.05.2013, 16:17  [ТС]     Вывести два предложения и распечатать самые длинные слова, общие для этих предложений #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
61
62
63
#include "stdafx.h"
#include "iostream"
#include <stdio.h>
#include <string>
#include <fstream>
#include <conio.h>
#include <windows.h>
#include <vector>
unsigned int m,n,p,g,v,i,t1,t2,k;
int index,end_wor;
int maxi1=0,x=0,maxi2=0,maxi3=0,max4=0;
using namespace std;
 
void main()
{     
    
    setlocale(0,"RUS");
    ifstream input("input.txt");
    string str;
 
    //цикл для вывода строки
    while(!input.eof())
    {
        str += input.get();
    }
    cout << "Начальная строка: " << str << endl;
    
    //вывод количества символов
    k = str.length();
    cout << "Длина строки= " << k<< endl;
 
    
    for(i=0;i<k;i++)
   { 
    if(str[i]=='.')
    {
       t1=i;break;
    }
  }
    cout << "t1= " <<t1 << endl;
    
 
    for(i=0;i<t1;i++)
   {
     if(str[i]==' '|| str[i]=='\0')
     {
         if(maxi2>maxi1)
         {
           maxi2 = maxi1;
           index = i;
         }
         //если конец строки или предложения -> выйти из цикла
         if(str[i]=='\0' || str[i]=='.')break;
         maxi2 = 0;
      }
      else maxi2++;
   }
    end_wor=index+maxi2;
    cout<<maxi2<<endl<<end_wor<<"-Индекс последней буквы в самом длинном слове"<<endl;
    
    
    system("pause");
}
Вот мой код, он ищет только максимальное слово в 1ом предожении, а если границы цикла переделывать на второе, то выдает не правильный ответ. И ещё то, имеет ли смысл искать максимальное слово во втором предложении ,как можно найти такое же слово как и в превом, с помощью какого цикла?
Issues
430 / 365 / 37
Регистрация: 06.08.2012
Сообщений: 961
22.05.2013, 19:42     Вывести два предложения и распечатать самые длинные слова, общие для этих предложений #4
Печатает все общие, в отсортированном по длине виде.
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
#include <algorithm>
#include <iostream>
#include <sstream>
#include <string>
#include <vector>
 
////////////////////////////////////////
#define vecStr std::vector<std::string> 
///////////////////////////////////////
 
bool LengthComp (const std::string& lhs, const std::string& rhs) {
    return (lhs.size() < rhs.size()); // compares with the length
}
 
vecStr Intersection(const vecStr&, const vecStr&);
 
 
int main()
{
    std::string s1 = "Snake Pig Cat Dog";
    std::string s2 = "Elephant Dog Snake";
 
    std::cout << "S1: " << s1 << std::endl;
    std::cout << "S2: " << s2 << std::endl;
 
    vecStr vs1;
    vecStr vs2;
 
    std::stringstream ss(s1);
    std::string tmpStr;
 
    while (ss >> tmpStr)
        vs1.push_back(tmpStr);
 
    ss = std::stringstream(s2);
 
    while (ss >> tmpStr)
        vs2.push_back(tmpStr);
 
 
    vecStr res = Intersection(vs1, vs2);
    std::sort(res.begin(), res.end(), LengthComp);
 
    std::cout << "\nIntersection: ";
    for (auto i = res.begin(); i != res.end(); ++i)
        std::cout << *i << ' ';
    std::cout << std::endl;
 
    system("PAUSE");
    return 0;
}
 
vecStr Intersection(const vecStr& v1, const vecStr& v2)
{
    vecStr result;
 
    for (int i = 0; i < v1.size(); ++i) 
    {
        for (int j = 0; j < v2.size(); ++j)
            if (v1[i] == v2[j])
                result.push_back(v1[i]);
    }
 
    return result;
}
Yandex
Объявления
22.05.2013, 19:42     Вывести два предложения и распечатать самые длинные слова, общие для этих предложений
Ответ Создать тему
Опции темы

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