Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
apachan
13 / 13 / 2
Регистрация: 07.12.2010
Сообщений: 127
#1

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

14.01.2011, 20:59. Просмотров 758. Ответов 14
Метки нет (Все метки)

Есть прога, вводишь в нее текст и она выводит слова, где есть 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();
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.01.2011, 20:59
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Вывод слов группами (C++):

Вывод на экран чётных слов строки исправить на вывод нечётных слов - C++
#include&lt;conio.h&gt; #include&lt;iostream.h&gt; #include&lt;string.h&gt; #include&lt;stdio.h&gt; int i,l,j,k,p,n; char txt; char a,b; main() { ...

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

Считывание слов из потока cin и вывод их в поток cout, с заменой нежелательных слов словом "Bleep" - C++
Напишите программу, заглушающую нежелательные слова; иначе говоря, считайте слова из потока cin и выведите их в поток cout, заменив...

Строки. Поиск одинаковых слов в предложениях. Вывод вместо одинаковых слов "*" - C++
Ввести два предложения, если в них есть одинаковые слова то во втором предложении заменить эти слова на &quot;*&quot;, причем количество &quot;*&quot; должно...

Вывод слов - C++
Как осуществить вывод слов, а не адреса (см. Миниатюры)? #include &quot;stdafx.h&quot; #include &lt;iostream&gt; using namespace std; int...

Вывести введенные слова группами - C++
По одному ввести последовательность слов. Распечатать введенные слова группами, каждая из которых должна состоять из тех введенных слов,...

14
Алексaндр
131 / 108 / 5
Регистрация: 04.12.2010
Сообщений: 313
14.01.2011, 22:33 #2
тоесть, сначала вывести группу с повторениями букв, а потом - без них или наоборот?
0
sandye51
программист С++
685 / 587 / 39
Регистрация: 19.12.2010
Сообщений: 2,016
14.01.2011, 22:37 #3
apachan, написать функцию, которая определяет, является ли слово уникальным?
потом отсортировать через sort по убыванию
0
apachan
13 / 13 / 2
Регистрация: 07.12.2010
Сообщений: 127
15.01.2011, 10:37  [ТС] #4
Цитата Сообщение от Алексaндр Посмотреть сообщение
тоесть, сначала вывести группу с повторениями букв, а потом - без них или наоборот?
И так и так можно

Добавлено через 10 часов 39 минут
написать функцию, которая определяет, является ли слово уникальным?
Я не знаю, как переписать все это дело под весь цикл, слово является уникальным, если в нем нет 2-ух пар одинаковых букв (в моем случае), как это реализовать в коде?
0
sandye51
программист С++
685 / 587 / 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 раза, выводились вначале - я так и сделал
1
apachan
13 / 13 / 2
Регистрация: 07.12.2010
Сообщений: 127
15.01.2011, 13:52  [ТС] #6
Код конечно хороший, но такие "прелести" к сожалению не работают в мсвс++6.0 После ввода вообще ничего не происходит и куча варнингов...
0
sandye51
программист С++
685 / 587 / 39
Регистрация: 19.12.2010
Сообщений: 2,016
15.01.2011, 14:03 #7
странно, тут никаких новых стандартов.. вроде.

ты может просто не так прогу юзаешь?
там надо вводить слова и нажать для завершения ввода CTRL + Z потом enter
если конечно под виндоусом
0
apachan
13 / 13 / 2
Регистрация: 07.12.2010
Сообщений: 127
15.01.2011, 14:15  [ТС] #8
Интересно (работает, но ктрл+з и ентер надо почему-то 2 раза нажимать, я не сообразил), а алгоритм не можете сказать, каким образом сначала слова с 2-мя буквами выводили, а потом все остальные? Я уж как-нибудь попытаюсь переделать, чтобы было "по-колхозному", без наворотов, как у Вас
0
sandye51
программист С++
685 / 587 / 39
Регистрация: 19.12.2010
Сообщений: 2,016
15.01.2011, 15:12 #9
apachan, функция double_check проверяет является ли слово уникальным (число вхождений каждой буквой равно 2). И потом для кадого введеного слова проверяется, является ли оно таковым?
если да, то помещаем в начало списка, иначе в конец. Итог - в начале все уникальные, в конце - остальная хунта
0
apachan
13 / 13 / 2
Регистрация: 07.12.2010
Сообщений: 127
15.01.2011, 17:14  [ТС] #10
Цитата Сообщение от sandye51 Посмотреть сообщение
функция double_check
глупый вопрос, но из чего она состоит?)
0
sandye51
программист С++
685 / 587 / 39
Регистрация: 19.12.2010
Сообщений: 2,016
15.01.2011, 18:26 #11
apachan, а не пробовал код смотреть?
в этой функции всего лишь 3 строки
0
apachan
13 / 13 / 2
Регистрация: 07.12.2010
Сообщений: 127
15.01.2011, 20:20  [ТС] #12
Цитата Сообщение от sandye51 Посмотреть сообщение
а не пробовал код смотреть?
я не про это, я всмысле как ф-я проверяет?
0
sandye51
программист С++
685 / 587 / 39
Регистрация: 19.12.2010
Сообщений: 2,016
15.01.2011, 20:47 #13
а я про это, посмотри код и увидишь как определяет
0
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 (то есть группировало - в начале стоят слова с повтор. буквами, потом слова, буквы в которых идут строго по алфавиту (абвг будет, а бвгя уже нет), а слова, где буквы в случайном порядке стоят выводить вообще не надо.
как это сделать?
0
sandye51
программист С++
685 / 587 / 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; 
}
1
18.01.2011, 14:20
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.01.2011, 14:20
Привет! Вот еще темы с ответами:

Вывод 2-ух одинаковых слов - C++
дано предложение.в нем только два слова одинаковые.найти эти слова.

Вывод одинаковых слов - C++
Задание: &quot;Пользователь вводит набор слов. Необходимо сформировать массив из встречающихся более 1 раза слов&quot;. Написал код, но работает...

Вывод слов из строки - C++
Суть задачи: Дан текст, состоящий из N (2&lt;=N&lt;=10) строк с максимальной длиной 80 символов. Необходимо вывести в обратном алфавитном...

вывод слов из файла - C++
Задача такая, нужно вывести все слова которые находятся в файле, но проблема в том что если после слова стоит запятая то он считает что это...


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

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

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