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

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

Войти
Регистрация
Восстановить пароль
 
Pashka20
0 / 0 / 0
Регистрация: 18.06.2011
Сообщений: 1
#1

Дан текст, каждый символ которого может быть... - C++

21.06.2011, 13:30. Просмотров 751. Ответов 1
Метки нет (Все метки)

Дан текст, каждый символ которого может быть малой буквой, цифрой или одним из знаков +,-,*.
1. Выяснить, встречается ли в данном текста группа букв,заданная пользователем.
2. Подсчитать число и вывести такие группы букв, которые начинаются и кончаются одной и той же буквой.
3.Найти все такие группы Букв, в которые заданная пользователем буква входит указаное число раз.

 Комментарий модератора 
Придумывайте своим темам более осмысленные названия. "Очень интересная вещь" - не самое подходящее...
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.06.2011, 13:30
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Дан текст, каждый символ которого может быть... (C++):

Дан текст, каждый символ которого может быть малой буквой, цифрой или одним из знаков +,*,- - C++
дан текст, каждый символ которого может быть малой буквой, цифрой или одним из знаков +,*,-. группой букв называют такую...

Дан текст, хранящийся в текстовом файле f, каждый символ которого может быть малой буквой, цифрой или одним из знаков "+", "-", "*". - C++
Дан текст, хранящийся в текстовом файле f, каждый символ которого может быть малой буквой, цифрой или одним из знаков "+", "-", "*". Групой...

Преобразовать строку, удалив каждый символ * и повторив каждый символ, отличный от * - C++
Кто может решить задачки по С++? Решите плиз 1. Дана строка. Указать те слова, которые содержат хотябы одну букву k. 2. Дана строка,...

Преобразовать строку, удалив каждый символ «*» и повторив каждый символ, отличный от «*» - C++
Дана строка. Преобразовать ее, удалив каждый символ «*» и повторив каждый символ, отличный от «*». Помогите пожалуйста.

Преобразовать строку, удалив каждый символ * и повторив каждый символ, отличный от * - C++
Дана строка. Преобразовать ее, удалив каждый символ * и повторив каждый символ, отличный от *. Помогите решить, писал тоже самое на...

Преобразовать строку, удалив каждый символ * и удвоив каждый символ, отличный от * - C++
Дана строка преобразовать ее, удалив каждый символ * и удвоив каждый символ отличный от *.

1
silent_1991
Эксперт С++
4989 / 3046 / 149
Регистрация: 11.11.2009
Сообщений: 7,028
Завершенные тесты: 1
22.06.2011, 19:52 #2
Ой, быдлокод-быдлокод... Но мне простительно, руки наконец-то дошли до STL, поэтому надо же как-то тренироваться... Уверен, что придут гуру и напишут раза в 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
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
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
#include <iterator>
 
int main()
{
    setlocale(LC_ALL, "Rus");
 
    std::string letters = "abcdefghijklmnopqrstuvwxyz";
    std::string digits = "0123456789";
    std::string symbols = "+-*";
 
    std::string input_string;
 
    std::cout << "Введите текст: ";
    std::cin >> input_string;
 
    if (input_string.find_first_not_of(letters + digits + symbols) != std::string::npos)
    {
        std::cout << "Введённая строка не соответствует шаблону: строка должна  содержать только строчные буквы "
                     "латинского алфавита, цифры или знаки \"+\", \"-\" или \"*\"!" << std::endl;
 
        return 0;
    }
 
    std::vector< std::string > string_vector;
    std::vector< std::string >::const_iterator string_vector_it;
 
    std::string::const_iterator input_string_begin = input_string.begin();
 
//-----------------------------------------------------------------------------------------------------------------------------------------
 
    std::string substring;
 
    std::cout << "Введите искомую подстроку: ";
    std::cin >> substring;
 
    if (input_string.find_first_not_of(letters) != std::string::npos)
    {
        std::cout << "Введённая подстрока может состоять только из строчных букв латинского алфавита!" << std::endl;
 
        return 0;
    }
 
    std::cout << "Искомая подстрока"
              << (input_string.find(substring) == std::string::npos ? " не " : " ")
              << "найдена в исходной строке" << std::endl;
 
//-----------------------------------------------------------------------------------------------------------------------------------------
 
    for (std::string::value_type c = 'a'; c <= 'z'; ++c)
    {
        for (std::string::size_type left_pos = input_string.find_first_of(c);
             left_pos != std::string::npos;
             left_pos = input_string.find_first_of(c, left_pos + 1))
        {
            for (std::string::size_type right_pos = input_string.find_first_of(c, left_pos + 1), left_pos_copy = left_pos;
                 right_pos != std::string::npos;
                 left_pos_copy = right_pos, right_pos = input_string.find_first_of(c, left_pos_copy + 1))
            {
                string_vector.push_back(std::string (input_string_begin + left_pos, input_string_begin + right_pos + 1));
            }
        }
    }
    
    std::sort(string_vector.begin(), string_vector.end());
 
    string_vector_it = std::unique(string_vector.begin(), string_vector.end());
 
    string_vector.resize(string_vector_it - string_vector.begin());
 
    std::cout << "Группы букв введённой строки, начинающиеся и заканчивающиеся на одну и ту же букву: " << std::endl;
    std::copy(string_vector.begin(), string_vector.end(), std::ostream_iterator< std::string > (std::cout, "\n"));
 
    std::cout << "Общее их количество: " << string_vector.size() << std::endl;
 
//-----------------------------------------------------------------------------------------------------------------------------------------
 
    std::string::value_type input_letter;
    size_t let_num;
 
    std::cout << "Введите букву: ";
    std::cin >> input_letter;
 
    if (input_letter < 'a' || input_letter > 'z')
    {
        std::cout << "Необходимо ввести строчную букву латинского алфавита!" << std::endl;
 
        return 0;
    }
 
    std::cout << "Введите число букв в группе: ";
    std::cin >> let_num;
 
    string_vector.clear();
 
    std::string::size_type left_pos = 0;
 
    while ((left_pos = input_string.find_first_of(input_letter, left_pos)) != std::string::npos)
    {
        std::string::size_type right_pos = left_pos;
        size_t cur_let_num = 1;
 
        while ((right_pos = input_string.find_first_of(input_letter, right_pos + 1)) != std::string::npos)
        {
            if (++cur_let_num == let_num)
            {
                string_vector.push_back(std::string (input_string_begin + left_pos, input_string_begin + right_pos + 1));
 
                break;
            }
        }
 
        if (right_pos == std::string::npos)
            break;
 
        ++left_pos;
    }
 
    std::sort(string_vector.begin(), string_vector.end());
 
    string_vector_it = std::unique(string_vector.begin(), string_vector.end());
 
    string_vector.resize(string_vector_it - string_vector.begin());
 
    std::cout << "Группы букв введённой строки, содержащие букву " << input_letter << " " << let_num << " раз"
              << ((let_num % 10 == 2 || let_num % 10 == 3 || let_num % 10 == 4) &&
                  !(let_num == 12 || let_num == 13 || let_num == 14) ? "а" : "") << ": " << std::endl;
    std::copy(string_vector.begin(), string_vector.end(), std::ostream_iterator< std::string > (std::cout, "\n"));
 
    return 0;
}
Добавлено через 16 часов 52 минуты
Чутка переделал. Всё же с set'ом лучше смотрится, и лишних телодвижений делать не надо... Да и бажик поправил (правда левой ногой поправил, лень что-то симпатичнее выдумывать):

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
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
#include <iostream>
#include <string>
#include <set>
#include <algorithm>
#include <iterator>
 
int main()
{
    setlocale(LC_ALL, "Rus");
 
    std::string letters = "abcdefghijklmnopqrstuvwxyz";
    std::string digits = "0123456789";
    std::string symbols = "+-*";
 
    std::string input_string;
 
    std::cout << "Введите текст: ";
    std::cin >> input_string;
 
    if (input_string.find_first_not_of(letters + digits + symbols) != std::string::npos)
    {
        std::cout << "Введённая строка не соответствует шаблону: строка должна  содержать только строчные буквы "
                     "латинского алфавита, цифры или знаки \"+\", \"-\" или \"*\"!" << std::endl;
 
        return 0;
    }
 
    std::set< std::string > string_set;
 
    std::string::const_iterator input_string_begin = input_string.begin();
 
//-----------------------------------------------------------------------------------------------------------------------------------------
 
    std::string substring;
 
    std::cout << "Введите искомую подстроку: ";
    std::cin >> substring;
 
    if (substring.find_first_not_of(letters) != std::string::npos)
    {
        std::cout << "Введённая подстрока может состоять только из строчных букв латинского алфавита!" << std::endl;
 
        return 0;
    }
 
    std::cout << "Искомая подстрока"
              << (input_string.find(substring) == std::string::npos ? " не " : " ")
              << "найдена в исходной строке" << std::endl;
 
//-----------------------------------------------------------------------------------------------------------------------------------------
 
    for (std::string::value_type c = 'a'; c <= 'z'; ++c)
    {
        for (std::string::size_type left_pos = input_string.find_first_of(c);
             left_pos != std::string::npos;
             left_pos = input_string.find_first_of(c, left_pos + 1))
        {
            for (std::string::size_type right_pos = input_string.find_first_of(c, left_pos + 1), left_pos_copy = left_pos;
                 right_pos != std::string::npos;
                 left_pos_copy = right_pos, right_pos = input_string.find_first_of(c, left_pos_copy + 1))
            {
                string_set.insert(std::string (input_string_begin + left_pos, input_string_begin + right_pos + 1));
            }
        }
    }
 
    std::cout << "Группы букв введённой строки, начинающиеся и заканчивающиеся на одну и ту же букву: " << std::endl;
    std::copy(string_set.begin(), string_set.end(), std::ostream_iterator< std::string > (std::cout, "\n"));
 
    std::cout << "Общее их количество: " << string_set.size() << std::endl;
 
//-----------------------------------------------------------------------------------------------------------------------------------------
 
    std::string::value_type input_letter;
    size_t let_num;
 
    std::cout << "Введите букву: ";
    std::cin >> input_letter;
 
    if (input_letter < 'a' || input_letter > 'z')
    {
        std::cout << "Необходимо ввести строчную букву латинского алфавита!" << std::endl;
 
        return 0;
    }
 
    std::cout << "Введите число букв в группе: ";
    std::cin >> let_num;
 
    if (let_num != 1)
    {
        string_set.clear();
 
        std::string::size_type left_pos = 0;
 
        while ((left_pos = input_string.find_first_of(input_letter, left_pos)) != std::string::npos)
        {
            std::string::size_type right_pos = left_pos;
            size_t cur_let_num = 1;
 
            while ((right_pos = input_string.find_first_of(input_letter, right_pos + 1)) != std::string::npos)
            {
                if (++cur_let_num == let_num)
                {
                    string_set.insert(std::string (input_string_begin + left_pos, input_string_begin + right_pos + 1));
 
                    break;
                }
            }
 
            if (right_pos == std::string::npos)
                break;
 
            ++left_pos;
        }
 
        std::cout << "Группы букв введённой строки, содержащие букву " << input_letter << " " << let_num << " раз"
                  << ((let_num % 10 == 2 || let_num % 10 == 3 || let_num % 10 == 4) &&
                      !(let_num == 12 || let_num == 13 || let_num == 14) ? "а" : "") << ": " << std::endl;
        std::copy(string_set.begin(), string_set.end(), std::ostream_iterator< std::string > (std::cout, "\n"));
    }
    else
        if (input_string.find_first_of(input_letter) != std::string::npos)
            std::cout << "Группы букв введённой строки, содержащие букву " << input_letter << " 1 раз: " << std::endl
                      << input_letter << std::endl;
 
    return 0;
}
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.06.2011, 19:52
Привет! Вот еще темы с ответами:

Зашифровать текст заменив каждый символ другим символом - C++
Дан русский текст, записанный с помощью букв и знаков препинания. Зашифровать данный текст, заменив каждый символ другим символом - его...

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

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

Как поэлементно считать текст с файла с помощью fstream, и сохранить каждый символ в массив? - C++
как поэлементно считать текст с файла,и сохранить каждый символ в массив?


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

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

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