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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.60
Alexandr1966
25 / 25 / 1
Регистрация: 17.12.2012
Сообщений: 438
#1

Определить, имеются ли в последовательности слова, в которых каждая буква слова входит в него не менее двух раз - C++

25.09.2013, 05:49. Просмотров 1483. Ответов 25
Метки нет (Все метки)

Есть задача, никак не могу разобраться, помогите пожалуйста реализовать))
Определить, имеются ли в последовательности слова, в которых каждая буква слова входит в него не менее двух раз.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.09.2013, 05:49
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Определить, имеются ли в последовательности слова, в которых каждая буква слова входит в него не менее двух раз (C++):

Строковые переменные: Найти все слова, в которых буква ''а'' входит не менее двух раз - C++
Дан текст. Найти все слова, в которых буква ''а'' входит не менее двух раз.

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

Напечатать слова, в которых первая буква входит в него еще раз - C++
Дана последовательность, содержащая от 2 до 50 слов, в каждом из которых от 1 до 8 строчных латинских букв; между соседними словами -...

Каждая буква входит в слово не менее двух раз (на си) - C++
Дана строка, состоящая из слов, разделенных пробелами (одним или несколькими). Напечатать все слова, которые удовлетворяют следующему...

Каждая буква входит в слово не менее двух раз - C++
Используя класс string, решить задание: Дана строка. Между соседними словами - не менее одного пробела, за последним словом – точка....

Что здесь неправильно? (Вывести все слова строки в которых первая буква входит в него ещё раз) - C++
Задание: Вывести все слова строки в которых первая буква входит в него ещё раз. #include <iostream> #include <string> #include...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Alexandr1966
25 / 25 / 1
Регистрация: 17.12.2012
Сообщений: 438
08.10.2013, 05:18  [ТС] #16
на простом с++
0
alsav22
5419 / 4815 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
08.10.2013, 06:32 #17
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
#include "conio.h"
#include <stdio.h>
#include "string.h"
 
int main() 
{
    const int N = 6;
    char str[N][30];
    
    printf("%s %d %s", "Enter", N, "words:\n");
    for (int i = 0; i < N; ++i)
        scanf("%s", str[i]);
    printf("\n");
    
    for (int i = 0; i < N; ++i)
    {
        int n = 1;
        int size = strlen(str[i]);
        for (int j = 0; j < size; ++j)
        {
            for (int k = j + 1; k < size; ++k)
            {
                if ( str[i][j] == str[i][k]) ++n;
                if (n == 2) 
                {
                    printf("%s\n", str[i]);
                    break;
                }
            }
            if (n == 2) break;
        }
    }
    
    getch();
    return 0;
}
1
Alexandr1966
25 / 25 / 1
Регистрация: 17.12.2012
Сообщений: 438
08.10.2013, 07:05  [ТС] #18
Программка работает почти правильно, НО она выводит слова, в которых помимо повторяющихся букв есть одна неповторяющаяся, вот на картинке запуск программы представлен. Слова capac и topot не должны выводиться, так как в первом и во втором слове одна буква p, а вывод должен осуществляться только тех слов где всех букв больше две(
0
Изображения
 
alsav22
5419 / 4815 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
08.10.2013, 07:16 #19
Значит я неправильно понял задание.
0
kamre
126 / 130 / 4
Регистрация: 25.12.2011
Сообщений: 443
08.10.2013, 07:19 #20
Цитата Сообщение от Alexandr1966 Посмотреть сообщение
на простом с++
Достаточно простой C++:
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
#include <string>
#include <vector>
#include <algorithm>
#include <iostream>
 
using namespace std;
 
bool all_multiple(string s) {
    if (s.empty())
        return true;
    sort(s.begin(), s.end());
    int count = 0;
    char prev = s[0];
    for (size_t i = 0; i < s.length(); ++i) {
        char c = s[i];
        if (c == prev) {
            count++;
        } else {
            if (count <= 1)
                return false;
            count = 1;
            prev = c;
        }
    }
    return count > 1;
}
 
int main() {
    cout << "Enter words or Ctrl+Z to stop and check:" << endl;
    vector<string> words;
    string word;
    while (cin >> word)
        words.push_back(word);
 
    for (size_t i = 0; i < words.size(); ++i) {
        if (all_multiple(words[i]))
            cout << words[i] << endl;
    }
}
?
0
Alexandr1966
25 / 25 / 1
Регистрация: 17.12.2012
Сообщений: 438
08.10.2013, 07:23  [ТС] #21
а сможешь переделать, чтоб правильно заработало((((

Добавлено через 3 минуты
вот как ALSAV выше реализовывал, вот так нужно)
0
kamre
126 / 130 / 4
Регистрация: 25.12.2011
Сообщений: 443
08.10.2013, 07:32 #22
Цитата Сообщение от Alexandr1966 Посмотреть сообщение
вот так нужно)
Какой привереда попался! И так уже одни циклы и условия, разве что std::sort используется...

А вообще у него вроде бы на чистом C написано, так что это вообще в другой форум!
0
Alexandr1966
25 / 25 / 1
Регистрация: 17.12.2012
Сообщений: 438
08.10.2013, 07:37  [ТС] #23
вообще привереда))))
0
alsav22
5419 / 4815 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
08.10.2013, 08:58 #24
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
#include "conio.h"
#include <stdio.h>
#include "string.h"
 
int check(const char *str, const char ch)
{
    int size = strlen(str);
    for (int i = 0; i < size; ++i)
    {
        if (str[i] == ch) 
            return 1;
    }
    return 0;
}
 
int main() 
{
    const int N = 6;
    char str[N][30];
    
    printf("%s %d %s", "Enter", N, "words:\n");
    for (int i = 0; i < N; ++i)
        scanf("%s", str[i]);
    printf("\n");
    
    for (int i = 0; i < N; ++i)
    {
        int n = 1, m = 0;
        char temp[30] = "\0";
        int size = strlen(str[i]);
        int flag = 0;
        
        for (int j = 0; j < size; ++j)
        {
            while (check(temp, str[i][j]))
            {
                ++j;
                if (j == size)
                {
                    flag = 1;
                    break;
                }
            }
            if (flag == 1) break;
            for (int k = j + 1; k < size; ++k)
            {
                if (str[i][j] == str[i][k]) ++n;
                if (n == 2) 
                {
                    temp[m] = str[i][j];
                    ++m;
                    break;
                }
            }
            if (n < 2) break;
            n = 1;
        }
        if (flag == 1) 
        {
            printf("%s\n", str[i]);
            flag = 0;
        }
    }
    
    getch();
    return 0;
}
1
Alexandr1966
25 / 25 / 1
Регистрация: 17.12.2012
Сообщений: 438
08.10.2013, 17:52  [ТС] #25
А можно прокомментировать строки а, что каждая строчка делает пожалуйста)

Добавлено через 1 час 12 минут
а то как то непоянтно)
0
alsav22
5419 / 4815 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
08.10.2013, 22:43 #26
Кликните здесь для просмотра всего текста
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
#include "conio.h"
#include <stdio.h>
#include "string.h"
 
int check(const char *str, const char ch) // функция проверки нахождения символа в массиве
{
    int size = strlen(str);
    for (int i = 0; i < size; ++i) // перебор символов в массиве
    {
        if (str[i] == ch) 
            return 1; // если символ в массиве есть
    }
    return 0; // если нет
}
 
int main() 
{
    const int N = 6;
    char str[N][30];
    
    printf("%s %d %s", "Enter", N, "words:\n");
    for (int i = 0; i < N; ++i)
        scanf("%s", str[i]);
    printf("\n");
    
    for (int i = 0; i < N; ++i) // перебор слов
    {
        int n = 1, m = 0; // n - количество найденных одинаковых букв, m - индекс символов в temp
        char temp[30] = "\0"; // массив для букв, которых в слове не менее двух
        int size = strlen(str[i]); // размер слова
        int flag = 0; // флаг нахождения слова, соответствующего условию
        
        for (int j = 0; j < size; ++j) // перебор и анализ букв в слове
        {
            while (check(temp, str[i][j])) // если такая буква слова уже есть в temp, то пропускаем её
            {
                ++j;
                if (j == size) // если в temp все буквы, которых в слове не менее двух
                {
                    flag = 1; // найдено слово, соответствующее условию
                    break;    // выход для вывода найденного слова
                }
            }
            if (flag == 1) break; // выход для вывода найденного слова
            for (int k = j + 1; k < size; ++k) // если буквы слова нет в temp, сравниваем её со следующими буквами слова
            {
                if (str[i][j] == str[i][k]) ++n; // если найдена в слове такая же буква
                if (n == 2) // если таких букв не менее двух
                {
                    temp[m] = str[i][j]; // записываем такую букву в temp
                    ++m;
                    break; // переход к анализу следующей буквы в этом слове
                }
            }
            if (n < 2) break; // если второй такой буквы в слове нет, то слово не подходит под условие
                              // переход к анализу следующего слова
            n = 1; // если вторая буква найдена, переход к анализу следующей буквы в этом слове
        }
        if (flag == 1) // вывод слова, соответствующего условию
        {
            printf("%s\n", str[i]);
            flag = 0;
        }
    }
    
    getch();
    return 0;
}
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.10.2013, 22:43
Привет! Вот еще темы с ответами:

Найти слова, у которых первая буква входит в слово ещё раз - C++
Ребята, помогите пожалуйста! Возникли проблемы с написанием программы на С++ Задание: В произвольном тексте (взятом из файла),...

Найти все слова, в которые заданный символ входит не менее двух раз - C++
Написать 2 программы 1) 2) Для каждой программы написать 2 варианта: 1 вариант - работа со строками поэлементно char 2...

Найти и вывести на печать слова, у которых первая буква входит в слово ещё раз - C++
Ребята, помогите пожалуйста! Завтра нужно сдавать лабу для допуска к экзамену, а я никак не могу её сделать... Задание: в произвольном...

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


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
08.10.2013, 22:43
Ответ Создать тему
Опции темы

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