Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 03.01.2020
Сообщений: 17
1

Найти все симметричные слова-палиндромы

27.06.2022, 20:53. Показов 528. Ответов 3

Author24 — интернет-сервис помощи студентам
Задание трактуется так: Задан текст; между словами пробел, за последним словом точка. Напечатать все симметричные слова отличные от последнего. Использовать функции.
Как я понял под симметричными словами понимаются палиндромы. Текст задается пользователем с клавиатуры.

Надеюсь на Вашу скорую помощь и желательно объяснения.

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
#include <string>
#include <iostream>
#include <cstring>
 
using namespace std;
 
//bool check_polindrom(string word)
//{
    //int len = word.length();
    //for (int i = 0; i < len / 2; ++i)
    //{
        //if (word[i] != word[len - i - 1])
        //{
            //return false;
        //}
    //}
    //return true;
//}
//
//int main()
//{
    //string str;
    //cout << "Enter the word: ";
//  cin >> str;
//if (check_polindrom(str))
        //{
    //  cout << "Word is polindrom.";
        //}
//  else
    //{
    //  cout << "Word is not polindrom";
    //}
//  return 0;
//}
int main()
{
    string str, b, res;
    cout << "Vvedite stroku iz slov (ENG):" << endl;
    getline(cin, str);
 
    cout << "Iskomaya stroka:" << endl;
    cout << str << endl;
    return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.06.2022, 20:53
Ответы с готовыми решениями:

Найти в тексте симметричные слова (палиндромы)
Дан текст. Найти в нем все симметричные слова. Различие строчных и прописных букв во внимание не...

Найти в заданном тексте, состоящем из n строк, все слова палиндромы и числа палиндромы
Сроки жутко горят :( поэтому надеюсь на вашу помощь: Задача: Найти в заданном тексте, состоящем...

Найти и записать в выходной файл все симметричные слова
В произвольном тексте входного файла, содержащем не более 10 строк, в каждой строке не более 80...

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

Дана строка Найти и вывести все слова палиндромы
Дана строка слова в который разделены пробелами необходимо найти и вывести все слова палиндромы....

3
27 / 59 / 32
Регистрация: 06.08.2020
Сообщений: 215
27.06.2022, 21:46 2
Если симметричные слова палиндромы, то у вас функция check_polindrom(string word) вполне справляется с задачей поиска таких слов. Следующей функцией можно печатать такие слова, используя check_polindrom:
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
bool check_polindrom(const string& word) {
    int len = word.length();
    for (int i = 0; i < len / 2; ++i) {
        if (word[i] != word[len - i - 1])
            return false;
    }
    return true;
}
void print_polindrom(const string& str) {
    string temp = "";
    for (int i = 0; i < str.size(); ++i) {
        if (str[i] != ' ' && str[i] != '.')
            temp += str[i];
        else if (str[i] == ' ') {
            if (check_polindrom(temp))
                cout << temp << endl;
            temp.erase();
        }
        else {
            if (check_polindrom(temp))
                cout << temp << endl;
            temp.erase();
            break;
        }
    }
}
А если нужно печатать только отличные от последнего слова слова, являющиеся палиндромами, нужно добавить ещё и такую проверку.
1
0 / 0 / 0
Регистрация: 03.01.2020
Сообщений: 17
27.06.2022, 22:38  [ТС] 3
PencilTorch, Немного не понял какой функцией можно печатать палиндромы отличные от последнего.
Благодаря Вашей помощи, у меня получилось что-то такое.

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
#include <string>
#include <iostream>
#include <cstring>
 
using namespace std;
 
bool check_polindrom(string word1)
{
    int len = word1.length();
    for (int i = 0; i < len / 2; ++i)
    {
        if (word1[i] != word1[len - i - 1])
        {
            return false;
        }
    }
    cout << "Palindrom: " << word1 << endl;
}
 
int main()
{
    string str, word, res;
    string temp = "";
    cout << "Vvedite stroku iz slov (ENG):" << endl;
    getline(cin, str);
    for (int i = 0; i < str.size(); i++)
    {
        if (str[i] != ' ' && str[i] != '.')
        {
            temp += str[i];
        }
        else if (str[i] == ' ')
        {
            if (check_polindrom(temp))
            {
                cout << temp << endl;
            }
            temp.erase();
        }
        else {
            if (check_polindrom(temp))
                cout << temp << endl;
            temp.erase();
            break;
        }
    }
}
0
27 / 59 / 32
Регистрация: 06.08.2020
Сообщений: 215
28.06.2022, 11:23 4
over9rk, что бы найти последний палиндром, оптимально искать с конца строки слова и проверять их на симметричность. Эту операцию лучше выделить в отдельную функцию. Вообще, в любой не понятной ситуации - дробите задачу на подзадачу и решайте подзадачи. Если подзадачи не решаются - дробите и их.
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
#include <iostream>
#include <string>
 
using namespace std;
 
bool check_polindrom(const string& word) {
    int len = word.length();
    for (int i = 0; i < len / 2; ++i) {
        if (word[i] != word[len - i - 1])
            return false;
    }
    return true;
}
string end_pol(const string& str) {
    string temp;
    size_t pos_end = str.size();
    size_t pos_begin = str[0];
    while (pos_end != str.npos) {
        pos_begin = str.rfind(' ', pos_end - 1);
        if (pos_begin != str.npos) {
            for (size_t it = pos_begin + 1; it != pos_end; ++it) {
                if (str[it] != '.')
                    temp += str[it];
            }
            if (check_polindrom(temp))
                return temp;
        }
        temp.erase();
        pos_end = pos_begin;
    }
    return temp = "";
}
void print_polindrom(const string& str) {
    string temp = "";
    string end_polindrom = end_pol(str);
    for (size_t i = 0; i < str.size(); ++i) {
        if (str[i] != ' ' && str[i] != '.')
            temp += str[i];
        else if (str[i] == ' ') {
            if (check_polindrom(temp) && temp != end_polindrom)
                cout << temp << endl;
            temp.erase();
        }
        else {
            if (check_polindrom(temp))
                cout << temp << endl;
            temp.erase();
            break;
        }
    }
}
 
int main() {
    string str;
    cout << "Vvedite stroku iz slov (ENG):" << endl;
    getline(cin, str);
    print_polindrom(str);
 
    return 0;
}
1
28.06.2022, 11:23
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.06.2022, 11:23
Помогаю со студенческими работами здесь

Найти в тексте, состоящем из 1 строки, все слова и числа-палиндромы
Найдите в заданном тексте, состоящем из 1 строки, все слова и числа-палиндромы. Необходимо ввести...

В строке, состоящей из слов и знаков препинания найти все слова-палиндромы
В строке, состоящей из слов и знаков препинания(пробел . : , ! ? - ;) найти все слова-палиндромы....

Найти все числа-палиндромы, которые не больше 100, и их квадраты тоже палиндромы
Натуральное число называется палиндромом, если его запись читается однинакого с начала и с конца...

Дана строка, содержащая разделенные пробелами слова, вывести все слова-палиндромы
Дана строка, содержащая разделенные пробелами слова.Вивесты все имеющиеся слова-палиндлромы и их...

Найти слова, отличающиеся от последнего слова, и одновременно симметричные
Слова текста из малых латинских букв записаны не менее чем через один пробел; БЕЗ ИСПОЛЬЗОВАНИЯ...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru