Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Максим Бураков
0 / 0 / 0
Регистрация: 25.08.2017
Сообщений: 1
1

Упорядочить по алфавиту буквы каждого слова и удалить слова, содержащие одинаковые буквы

25.08.2017, 19:35. Просмотров 466. Ответов 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
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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
#include <stdio.h>
#include <stdlib.h>
 
typedef struct text { char *word; int ser; } *mass_str;
 
int strcmp(char*s, char*t)
{
    while (*s++ == *t++)
            if (*s == '\0')
                return 0;
        return(s - t);
}
 
int series(char* word)
{
    int i = 0, j = 1, max = 1;
    while (word[i] != '\0')
    {
        if (word[i] == word[i + 1]) j++;
        else if (j>max)
        {
            max = j;
            j = 1;
        }
        i++;
    }
    return(max);
}
 
void sort_mass(mass_str set, int len)
{
    int i, j;
    text m;
    for (j = 0; j<len; j++)
    {
    
        for (i = 0; i<len - 1; i++)
            if (set[i].ser>set[i + 1].ser)
            {
                m = set[i];
                set[i] = set[i + 1];
                set[i + 1] = m;
            }
    }
 
 
 
}
 
int get_word(size_t *n, char **buf)
{
    size_t i = 0;
    char c = getchar();
    while ((c != EOF) && (c <= ' ')) c = getchar();
    
        while (c > ' ')
        {
            (*buf)[i++] = c;
            c = getchar();
            if (i == *n)
            {
                *n = *n / 2 + *n;
                (*buf) = (char *)realloc(*buf, *n * sizeof(char));
            
        }
    }
    (*buf)[i] = '\0';
        return(i);
}
 
void get_text(size_t* m, size_t* n, mass_str set)
{
    size_t j = 0, k = 0;
    
    char *buf = (char*)calloc(*n, sizeof(char));
 
    size_t i = get_word(n, &buf);
    while (i) 
    {
        int c = 1, l = 0;
        set[k].word = (char*)calloc(*n, sizeof(char));
        while ((l<k)&&c)c = strcmp(buf, set[l++].word);
        if (c)
        {
            int z = 0;
            while (set[k].word[z] = buf[z])z++;
            k++;
        }
        i = get_word(n, &buf);
        if (*m == k)
        {
            *m = *m + *m / 2;
            set = (struct text*)realloc(set, *m * sizeof(text));
        }
    }
    free(buf);
    
    *m = k;
 
}
 
int main()
{
    size_t n=5;
    size_t m=5;
    mass_str set = (struct text*) malloc(m * sizeof(text));
    get_text(&m, &n,set);
    for (int i = 0; i<m; i++) (set[i].ser=series(set[i].word));
    sort_mass(set, m);
    for (int i = 0; i < m; i++) puts(set[i].word);
}
Сколько не вводи значения, программа просит больше, и так до бесконечности.
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.08.2017, 19:35
Ответы с готовыми решениями:

Упорядочить по алфавиту буквы каждого слова в предложении
Вводится предложение.Необходимо упорядочить буквы в словах по алфавиту и удалить слова, содержащие...

Удалить слова, содержащие все повторяющиеся буквы первого слова, из последовательности символов
Дана последовательность символов, состоящая из слов. Удалить слова, которые содержат все...

Упорядочить по алфавиту буквы слова
Дана последовательность, содержащая от 2 до 50 слов, в каждом из которых от 1 до 8 строчных...

Найти все слова, содержащие три одинаковые буквы
Задачка из контрольной: В тексте слова отделены пробелами. Найти все слова, содержащие три...

3
djedaimo
5 / 5 / 2
Регистрация: 07.04.2016
Сообщений: 88
26.08.2017, 13:33 2
пРИВЕДИ ПРИМЕРИ РАБОТИ ПРОГРАММИ
0
Fixer_84
1423 / 899 / 797
Регистрация: 30.04.2016
Сообщений: 3,075
26.08.2017, 18:33 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
#include <bits/stdc++.h>
 
using namespace std;
 
bool TheSameLetters(string str)
{
    sort(str.begin(), str.end());
    for (int i = 0; str[i]; i++)
        if (str[i] == str[i+1])
        {
            return true;
            break;
        }
    return false;
}
 
int main()
{
    string s = { "I have been pleased to help you" };
    string word;
    stringstream str(s);
    cout << "Output string:" << endl;
    while (str >> word)
    {
        if (!TheSameLetters(word))
        {
            sort(word.begin(), word.end());
            cout << word << " ";
        }
    }
    cout << endl;
    system("pause");
    return 0;
}
0
zss
Модератор
Эксперт С++
9252 / 7991 / 4907
Регистрация: 18.12.2011
Сообщений: 21,313
Завершенные тесты: 1
26.08.2017, 19:50 4
Fixer_84,
C++
1
2
3
4
5
6
7
8
9
10
bool TheSameLetters(string str)
{
    sort(str.begin(), str.end());
    for (int i = 0; i<str.size()-1; i++) // на 1 меньше
        if (str[i] != str[i+1])
        {
            return false; // как только встретили разные буквы
        }
    return true; // не встретились
}
C++
1
2
3
4
bool TheSameLetters(string str)
{
    return count(str.begin(), str.end(),str[0])==str.size();
}
1
26.08.2017, 19:50
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.08.2017, 19:50

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Макрос для LibreOffice: заменять все буквы каждого пятого слова на вторые буквы следующего слова за ним
Здравсвуйте! Нужен макрос для LibreOffice, который будет заменять все буквы каждого 5-го слова на...

Даны три слова.Напечатать их общие буквы. Повторяющиеся буквы каждого слова не рассматривать.
1 - Строки. Даны три слова.Напечатать их общие буквы. Повторяющиеся буквы каждого слова не...

Даны три слова. Напечатать их общие буквы. Повторяющиеся буквы каждого слова не рассматривать
Даны три слова. Напечатать их общие буквы. Повторяющиеся буквы каждого слова не рассматривать.

Даны три слова. Напечатать их общие буквы. Повторяющиеся буквы каждого слова не рассматривать
Даны три слова. Напечатать их общие буквы. Повторяющиеся буквы каждого слова не рассматривать . ...


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

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

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