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

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

Восстановить пароль Регистрация
 
ol-ejuk
0 / 0 / 0
Регистрация: 20.12.2012
Сообщений: 9
02.06.2013, 17:23     Cоставить функцию, выводящую на экран слова, которые од-новременно содержатся в каждой из двух заданных строк #1
Здравствуйте. Помогите составить функцию, выводящую на экран слова, которые од-новременно содержатся в каждой из двух заданных строк.
В главной программе ввести с клавиатуры три строки длиной до 80 символов и вывести на экран слова, которые содержатся в каждой паре строке. Заранее спасибо!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.06.2013, 17:23     Cоставить функцию, выводящую на экран слова, которые од-новременно содержатся в каждой из двух заданных строк
Посмотрите здесь:

C++ Написать программу, выводящую на экран строки, которые одновременно содержатся в двух заданных текстовых файлах
строки, которые одновременно содержатся в двух заданных текстовых файлах C++
Поменять местами первые слова (слова разделены пробелами) заданных строк, без использования процедур C++
C++ Найти в строке слова-сообщения, в которых содержатся цифры и вывести их на экран
Напечатать те слова, которые встречаются в каждом из двух заданных предложений C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Van111
кодер с++
208 / 187 / 4
Регистрация: 03.08.2011
Сообщений: 2,585
Записей в блоге: 12
02.06.2013, 17:34     Cоставить функцию, выводящую на экран слова, которые од-новременно содержатся в каждой из двух заданных строк #2
сначала создайте программу которая разделила бы строки на слова, тогда я вам помогу
ol-ejuk
0 / 0 / 0
Регистрация: 20.12.2012
Сообщений: 9
02.06.2013, 17:50  [ТС]     Cоставить функцию, выводящую на экран слова, которые од-новременно содержатся в каждой из двух заданных строк #3
А вы не можете создать мне эту программу? я просто ламер еще токо начал изучать, а сдать уже завтра надо, не успею разобраться=(
Хулиган
 Аватар для Хулиган
85 / 80 / 12
Регистрация: 08.08.2012
Сообщений: 737
02.06.2013, 18:56     Cоставить функцию, выводящую на экран слова, которые од-новременно содержатся в каждой из двух заданных строк #4
знаки препинания есть в строках?

Добавлено через 51 минуту
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
#include <iostream>
#include <vector>
#include <string>
using namespace std;
void show(vector<string>&);
int main()
{
     vector<string> v;
     string s;
     getline(cin, s);
     v.push_back(s);
     getline(cin, s);
     v.push_back(s);
     show(v);
     
}
 
void show(vector<string>& vs)
{
     string buff;
     int min, max;
     vs[0].size() < vs[1].size()? min=0, max=1 : min=1, max=0; //определяем под каким номером мин и макс строки 
     for(int i=0; i<vs[min].size(); i++)                                   //минимальную строку разбиваем на слова
     {
             
             if(vs[min][i]!=' ')
             {
                    buff+=vs[min][i];
             }
             else
             {
                 
                    vs.push_back(buff);           //сохраняем слова в vs
                    buff="";                           //очищаем буферную строку
             }
     }
     
     vs.push_back(buff);                              //последний символ строки символ, а не пробел поэтому слово           
                                                              // теряется и нужно его тоже сохранить
     cout<<"Words:"<<endl;
     
     for(int i=2; i<vs.size(); i++)
             if(vs[max].find(vs[i])!=-1)       //в большей строке ищем слова из меньшей, если не нашли find() 
                                                       //возвращает -1, если найдено то выводим слово
             {
                     cout<<vs[i]<<endl;
             }        
     
}

если осталось желание то можете разобраться в этом гавно-коде, в строку нельзя вводить знаки препинания, для поддержки русского языка разбирайтесь сами
Olivеr
 Аватар для Olivеr
411 / 407 / 13
Регистрация: 06.10.2011
Сообщений: 830
02.06.2013, 19:56     Cоставить функцию, выводящую на экран слова, которые од-новременно содержатся в каждой из двух заданных строк #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
#include <iostream>
#include <sstream>
#include <vector>
#include <string>
#include <algorithm>
#include <iterator>
 
using namespace std;
 
typedef istream_iterator<string> str_in;
typedef istringstream ss;
 
void findOK(const vector<string> &v1, const vector<string> &v2)
{
    for (auto &word : v1)
        if ( find(begin(v2), end(v2), word)!=end(v2) ) cout << word << ", ";
}
 
int main()
{
    string str1, str2, str3;
    cout << "str1 = "; getline(cin, str1);
    cout << "str2 = "; getline(cin, str2);
    cout << "str3 = "; getline(cin, str3);
    vector<string> v1( str_in( *unique_ptr<ss>(new ss(str1)) ), (str_in()) ),
                   v2( str_in( *unique_ptr<ss>(new ss(str2)) ), (str_in()) ),
                   v3( str_in( *unique_ptr<ss>(new ss(str3)) ), (str_in()) );
 
    cout << "str1 and str2:\n"; findOK(v1, v2);
    cout << "\nstr1 and str3:\n"; findOK(v1, v3);
    cout << "\nstr2 and str3:\n"; findOK(v2, v3);
    return 0;
}
BumerangSP
 Аватар для BumerangSP
4283 / 1405 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
02.06.2013, 21:34     Cоставить функцию, выводящую на экран слова, которые од-новременно содержатся в каждой из двух заданных строк #6
Ох, чувствую, косяк где-то Это для строк с любыми разделителями.
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 <algorithm>
#include <vector>
 
bool isEqual(std::string str1, std::string str2)
{
    return str1 == str2;
}
 
void tokens(const std::string& str1, const std::string& str2, std::vector<std::string>& words1, 
            std::vector<std::string>& words2)
    {
        const char* tokens = ", .!?;:-_";
        std::vector<std::string>::iterator wordsIter = words1.begin();
        const std::string *strPtr = &str1;
        for (int i=0; i<2; ++i)
        {
            size_t beginPos = 0, nextPos = 0;
            std::string word;
            if ((beginPos = strPtr->find_first_of(tokens)) != 0)
            {
                word = strPtr->substr(0, beginPos);
                *wordsIter++ = word;
            }
            while((beginPos = strPtr->find_first_of(tokens, nextPos)) != std::string::npos)
            {
                if ((nextPos = strPtr->find_first_of(tokens, beginPos + 1)) == std::string::npos)
                    nextPos = strPtr->size();
                if ((nextPos - beginPos) > 1)
                {
                    word = strPtr->substr(beginPos + 1, nextPos - (beginPos + 1));
                    *wordsIter++ = word;
                }
            }
            strPtr = &str2;
            wordsIter = words2.begin();
        }
        std::vector <std::string> equalWords;
        std::vector <std::string>::iterator posEqual = equalWords.begin();
        while((posEqual = std::find_first_of(words1.begin(), words1.end(), words2.begin(), 
            words2.end(), isEqual)) != words1.end())
        {
            equalWords.push_back(*posEqual);
            words1.erase(posEqual); 
        }
        words1 = equalWords;
    }
int main()
{
    std::string str1 = " KSC.sc.sc.m .sdcd ", str2 = "S.fedf sc.dfEF,m.SEf", 
        str3 = "   fkssks m  sc  ,.,.vEF CD.ef.e?!?";
    std::vector<std::string> words1(50), words2(50), words3(50);
    tokens(str1, str2, words1, words2);
    tokens(str2, str3, words1, words3);
    for (int i=0; i<words1.size(); ++i)
        std::cout << words1[i] <<  ' ';
    std::cout << std::endl;
    return 0;
}
Yandex
Объявления
02.06.2013, 21:34     Cоставить функцию, выводящую на экран слова, которые од-новременно содержатся в каждой из двух заданных строк
Ответ Создать тему
Опции темы

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