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

Вывод слов группами - C++

Восстановить пароль Регистрация
 
apachan
13 / 13 / 2
Регистрация: 07.12.2010
Сообщений: 127
14.01.2011, 20:59     Вывод слов группами #1
Есть прога, вводишь в нее текст и она выводит слова, где есть 2 повтор. 2 раза буквы (abba, dcdс) и только они.
Не пойму, как изменить прогу, чтобы выводила слова группами (то есть в начале собственно группа-результат, а потом остальные введенные).
Пример: ввели - abba rhyjnf bcbc hfjwki aewr uuhh
должно вывести - abba bcbc uuhh rhyjnf hfjwki aewr
или rhyjnf hfjwki aewr abba bcbc uuhh

Помогите пжлста

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
#include <iostream>
using namespace std;
#include <math.h>
#include <string.h>
#include <stdlib.h>
#include <sstream>
#include <ctype.h>
#include <conio.h>
 
void main()
{
    int l,i,j,k,h;
    char p,q;
    bool Q, I,J=false;
    char* f;
    char*a=new char[80*sizeof(char)];
    a="abcdefghijklmnopqrstuvwxyz";
    char*s=new char[80*sizeof(char)];
    cin.getline(s,80);
    s[80]=NULL;
    while(*s!=NULL)
    {
        l=0;
        k=0;
        I=false;
        J=false;
        while((*s!=' ')&&(*s!=NULL))
        {
            l++;
            s++;
        }
        s=s-l;
        f=strchr(a,tolower(*s));
        if(f!=NULL)
            for(i=0;i<l;i++)
                if(tolower(*s)==*f)
                {
                    k++;
                    s++;
                    f++;
                }
        if((k==l)&&(k!=0))
            I=true;
        s=s-k;
        if(*s!=' ')
        {
            q=' ';
            h=0;
        for(i=0;i<l;i++)
        {
            p=*s;
            s++;
            for(j=i+1;j<l;j++)
            {
 
                if ((p==*s)&&(q!=p))
                    {
                        h++;
                        q=p;
                    }
                s++;
            }
            s=s-l+i+1;
        }
        if(h==2)
        {
            J=true;
        }
        }
        s-=l;
 
        if((I==true)||(J==true))
        {
            for(i=0;i<l;i++)
            {
                printf("%c",*s);
                s++;
            }
            printf(" ") ;
        }
 
        p=NULL;
 
        if((l==0)&&(I==false)&&(J==false))
            s++;
        if((l!=0)&&(I==false)&&(J==false))
            s+=l;
 
    }
    getch();
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Алексaндр
 Аватар для Алексaндр
131 / 108 / 5
Регистрация: 04.12.2010
Сообщений: 313
14.01.2011, 22:33     Вывод слов группами #2
тоесть, сначала вывести группу с повторениями букв, а потом - без них или наоборот?
sandye51
программист С++
 Аватар для sandye51
677 / 579 / 39
Регистрация: 19.12.2010
Сообщений: 2,016
14.01.2011, 22:37     Вывод слов группами #3
apachan, написать функцию, которая определяет, является ли слово уникальным?
потом отсортировать через sort по убыванию
apachan
13 / 13 / 2
Регистрация: 07.12.2010
Сообщений: 127
15.01.2011, 10:37  [ТС]     Вывод слов группами #4
Цитата Сообщение от Алексaндр Посмотреть сообщение
тоесть, сначала вывести группу с повторениями букв, а потом - без них или наоборот?
И так и так можно

Добавлено через 10 часов 39 минут
написать функцию, которая определяет, является ли слово уникальным?
Я не знаю, как переписать все это дело под весь цикл, слово является уникальным, если в нем нет 2-ух пар одинаковых букв (в моем случае), как это реализовать в коде?
sandye51
программист С++
 Аватар для sandye51
677 / 579 / 39
Регистрация: 19.12.2010
Сообщений: 2,016
15.01.2011, 13:18     Вывод слов группами #5
apachan, через sort не получилось), но зато так работает
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
#include <algorithm>
#include <conio.h>
#include <vector>
#include <string>
#include <iterator>
#include <iostream>
#include <list>
 
using namespace std;
 
bool double_check(const string& Buffer)
{
    for(string::const_iterator i = Buffer.begin(), end = Buffer.end(); i != end; ++i)
        if (count(Buffer.begin(), Buffer.end(), *i) != 2)
            return false;
    return true;
}
 
int main()
{
    vector<string> v;
    list<string> v1;
    copy(istream_iterator<string>(cin), istream_iterator<string>(), back_inserter(v));
    for (vector<string>::iterator i = v.begin(), end = v.end(); i != end; ++i)
        if (double_check(*i))
            v1.push_front(*i);
        else
            v1.push_back(*i);
    copy(v1.begin(), v1.end(), ostream_iterator<string>(cout, " "));
    _getch();
    return EXIT_SUCCESS; 
}
я не понял че ты написал в последнем сообщении, но в первом сообщении у тебя сказано, чтобы слова, где каждая буква встречается 2 раза, выводились вначале - я так и сделал
apachan
13 / 13 / 2
Регистрация: 07.12.2010
Сообщений: 127
15.01.2011, 13:52  [ТС]     Вывод слов группами #6
Код конечно хороший, но такие "прелести" к сожалению не работают в мсвс++6.0 После ввода вообще ничего не происходит и куча варнингов...
sandye51
программист С++
 Аватар для sandye51
677 / 579 / 39
Регистрация: 19.12.2010
Сообщений: 2,016
15.01.2011, 14:03     Вывод слов группами #7
странно, тут никаких новых стандартов.. вроде.

ты может просто не так прогу юзаешь?
там надо вводить слова и нажать для завершения ввода CTRL + Z потом enter
если конечно под виндоусом
apachan
13 / 13 / 2
Регистрация: 07.12.2010
Сообщений: 127
15.01.2011, 14:15  [ТС]     Вывод слов группами #8
Интересно (работает, но ктрл+з и ентер надо почему-то 2 раза нажимать, я не сообразил), а алгоритм не можете сказать, каким образом сначала слова с 2-мя буквами выводили, а потом все остальные? Я уж как-нибудь попытаюсь переделать, чтобы было "по-колхозному", без наворотов, как у Вас
sandye51
программист С++
 Аватар для sandye51
677 / 579 / 39
Регистрация: 19.12.2010
Сообщений: 2,016
15.01.2011, 15:12     Вывод слов группами #9
apachan, функция double_check проверяет является ли слово уникальным (число вхождений каждой буквой равно 2). И потом для кадого введеного слова проверяется, является ли оно таковым?
если да, то помещаем в начало списка, иначе в конец. Итог - в начале все уникальные, в конце - остальная хунта
apachan
13 / 13 / 2
Регистрация: 07.12.2010
Сообщений: 127
15.01.2011, 17:14  [ТС]     Вывод слов группами #10
Цитата Сообщение от sandye51 Посмотреть сообщение
функция double_check
глупый вопрос, но из чего она состоит?)
sandye51
программист С++
 Аватар для sandye51
677 / 579 / 39
Регистрация: 19.12.2010
Сообщений: 2,016
15.01.2011, 18:26     Вывод слов группами #11
apachan, а не пробовал код смотреть?
в этой функции всего лишь 3 строки
apachan
13 / 13 / 2
Регистрация: 07.12.2010
Сообщений: 127
15.01.2011, 20:20  [ТС]     Вывод слов группами #12
Цитата Сообщение от sandye51 Посмотреть сообщение
а не пробовал код смотреть?
я не про это, я всмысле как ф-я проверяет?
sandye51
программист С++
 Аватар для sandye51
677 / 579 / 39
Регистрация: 19.12.2010
Сообщений: 2,016
15.01.2011, 20:47     Вывод слов группами #13
а я про это, посмотри код и увидишь как определяет
apachan
13 / 13 / 2
Регистрация: 07.12.2010
Сообщений: 127
16.01.2011, 12:19  [ТС]     Вывод слов группами #14
вообщем, я не так понял задание, надо было, чтобы из набора слов: ABBA BCDE GGBB IARTN PAXZW HYYH ABCD
выводило только ABBA GGBB HYYH ABCD BCDE (то есть группировало - в начале стоят слова с повтор. буквами, потом слова, буквы в которых идут строго по алфавиту (абвг будет, а бвгя уже нет), а слова, где буквы в случайном порядке стоят выводить вообще не надо.
как это сделать?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.01.2011, 14:20     Вывод слов группами
Еще ссылки по теме:

C++ STL: Сортировка слов по количеству согласных букв; вывод слов, встречающихся в списке более одного раза
Вывод слов с пробелами C++
C++ Вывод слов из строки

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

Или воспользуйтесь поиском по форуму:
sandye51
программист С++
 Аватар для sandye51
677 / 579 / 39
Регистрация: 19.12.2010
Сообщений: 2,016
18.01.2011, 14:20     Вывод слов группами #15
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
#include <algorithm>
#include <conio.h>
#include <vector>
#include <string>
#include <iterator>
#include <iostream>
#include <list>
 
using namespace std;
 
bool double_check(const string& Buffer)
{
    for(string::const_iterator i = Buffer.begin(), end = Buffer.end(); i != end; ++i)
        if (count(Buffer.begin(), Buffer.end(), *i) != 2)
            return false;
    return true;
}
 
bool is_increase(const string& Buffer)
{
    string sort_string = Buffer;
    sort(sort_string.begin(), sort_string.end());
    return Buffer == sort_string;
}
 
int main()
{
    vector<string> v;
    list<string> v1;
    copy(istream_iterator<string>(cin), istream_iterator<string>(), back_inserter(v));
    for (vector<string>::iterator i = v.begin(), end = v.end(); i != end; ++i)
        if (double_check(*i))
            v1.push_front(*i);
        else
            if (is_increase(*i))
                v1.push_back(*i);
    copy(v1.begin(), v1.end(), ostream_iterator<string>(cout, " "));
    _getch();
    return EXIT_SUCCESS; 
}
Yandex
Объявления
18.01.2011, 14:20     Вывод слов группами
Ответ Создать тему
Опции темы

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