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

Найти два соседних слова с непересекающимся набором согласных - C++

Восстановить пароль Регистрация
 
Viktor7
0 / 0 / 0
Регистрация: 16.12.2010
Сообщений: 3
02.01.2011, 12:34     Найти два соседних слова с непересекающимся набором согласных #1
Помогите решить задачу :
Найти два соседних слова с непересекающимся набором согласных
Заранее спасибо !!!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.01.2011, 12:34     Найти два соседних слова с непересекающимся набором согласных
Посмотрите здесь:

C++ Написать программу,которая считывает текст из файла и выводит его на экран,меняя местами каждые два соседних слова.
C++ Написать программу, которая считывает текст из файла и выводит его на экран, меняя местами каждые два соседних слова
Написать программу, которая считывает текст из файла и выводит его на экран, меняя местами каждые два соседних слова C++
C++ Строки. В тексте поменять местами каждые два соседних слова
В строке найти слова, в которых гласных букв больше, чем согласных C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Mr.X
Эксперт С++
 Аватар для Mr.X
2802 / 1578 / 247
Регистрация: 03.05.2010
Сообщений: 3,666
02.01.2011, 15:11     Найти два соседних слова с непересекающимся набором согласных #2
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
//////////////////////////////////////////////////////////////////////////////////////
//Найти два соседних слова с непересекающимся набором согласных.
//////////////////////////////////////////////////////////////////////////////////////
#include <algorithm>
#include <iostream>
#include <iterator>
#include <sstream>
#include <string>
#include <vector>
//////////////////////////////////////////////////////////////////////////////////////
typedef std::string         T_str;
typedef std::vector<T_str>  T_words;
//////////////////////////////////////////////////////////////////////////////////////
void  print_adj_words_with_no_common_consonants(const T_words&  words)
{
    struct  T_have_no_common_consonants
    {
        T_str  consonants_;
        T_have_no_common_consonants() : consonants_("bcdfghklmnpqrstvwxz")
        {}
        //-----------------------------------------------------------------------------
        bool operator() (T_str  word_A, T_str  word_B)
        {
            T_str  common_letters;
            std::sort(word_A.begin(),word_A.end());
            std::sort(word_B.begin(),word_B.end());
            std::set_intersection(word_A.begin(),word_A.end(),
                                  word_B.begin(),word_B.end(),
                                  std::back_inserter(common_letters));
            T_str  common_consonants;
            std::set_intersection(common_letters.begin(),common_letters.end(),
                                  consonants_.begin(),consonants_.end(),
                                  std::back_inserter(common_consonants));
 
            return common_consonants.empty();
        }
    };    
    
    T_words::const_iterator  first_word_it  
        = std::adjacent_find(words.begin(), words.end(), T_have_no_common_consonants());
 
    if(first_word_it == words.end())
    {
        std::cout << "В предложении нет соседних слов без общих согласных."    
                  << std::endl;
    }
    else
    {
        std::cout << "Соседние слова в предложении, не имеющие общих согласных:"
                  << std::endl
                  << '\t'
                  << *first_word_it
                  << std::endl
                  << '\t'
                  << *(first_word_it + 1)
                  << std::endl;
    }    
}
//////////////////////////////////////////////////////////////////////////////////////
T_words  get_words(const T_str&  s)
{
    std::istringstream            ssin(s);
    std::istream_iterator<T_str>  ssin_beg(ssin);
    std::istream_iterator<T_str>  ssin_end;   
 
    T_words                       words;
    std::copy(ssin_beg, ssin_end, std::back_inserter(words)); 
    return  words;
}
//////////////////////////////////////////////////////////////////////////////////////
int main()
{
    std::locale::global(std::locale(""));
    std::cout << "String:"
              << std::endl;
    
    T_str  s;
    getline(std::cin, s);
    print_adj_words_with_no_common_consonants(get_words(s));
}
igorrr37
 Аватар для igorrr37
1593 / 1221 / 118
Регистрация: 21.12.2010
Сообщений: 1,868
Записей в блоге: 7
02.01.2011, 16:45     Найти два соседних слова с непересекающимся набором согласных #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
#include<iostream>
#include<sstream>
#include<vector>
#include<algorithm>
using namespace std;
 
int main()
{
    string s, s1="bcdfghjklmnpqrstvwxz", s2;
    cout<<"enter string\n";
    getline(cin, s);
    istringstream iss(s);
    vector<string> v;
    while(iss>>s) v.push_back(s);
    vector<string>::iterator it;
    for(it=v.begin();it!=v.end()-1;it++){
        char c[10]={'\0'}; char c1[10]={'\0'};
        string a=*it, b=*(it+1);
        sort(a.begin(), a.begin()+a.length());
        sort(b.begin(), b.begin()+b.length());
        set_intersection(a.begin(), a.begin()+a.length(),b.begin(), b.begin()+b.length(),c1);
        set_intersection(c1, c1+sizeof(c1), s1.begin(), s1.end(),c);
        if(c[0]=='\0') cout<<*it+" "+*(it+1)<<endl;
    }
 
 
}
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
02.01.2011, 17:12     Найти два соседних слова с непересекающимся набором согласных #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
#include <stdio.h>
#include <string.h>
 
#define CONSONANTS "bcdfghklmnpqrstvwxz"
#define DELIM " ,.;:!?\t\n"
    
int main(void){
    char buf[BUFSIZ], * left, * right, * p;
    
    while ( printf("String: ") && fgets(buf, BUFSIZ, stdin) && *buf != '\n' ){
        if ( ( left = strtok(buf, DELIM) ) == NULL ){
            fprintf(stderr, "Wrong input!\n");
            return 1;
        }
        while ( right = strtok(NULL, DELIM) ){
            for ( p = right; *p; ++p )
                if ( strchr(CONSONANTS, *p) && strchr(left, *p) )
                    break;
            if ( ! *p )
                printf("%s - %s\n", left, right);
            left = right;
        }
    }
    
    return 0;
}
Yandex
Объявления
02.01.2011, 17:12     Найти два соседних слова с непересекающимся набором согласных
Ответ Создать тему
Опции темы

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