Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/55: Рейтинг темы: голосов - 55, средняя оценка - 4.78
0 / 0 / 0
Регистрация: 30.11.2008
Сообщений: 13

Найти в заданном тексте, состоящем из n строк, все слова палиндромы и числа палиндромы

13.12.2008, 21:54. Показов 11388. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Сроки жутко горят поэтому надеюсь на вашу помощь:
Задача:
Найти в заданном тексте, состоящем из n строк, все слова палиндромы и числа палиндромы.(в словах допускается перенос на другую строку)
Палиндром-слово которое можно читать как слева направо так и наоборот : ШАЛАШ,ПОП или например фраза А РОЗА УПАЛА НА ЛАПУ АЗОРА. Или числа 1441, 121 и т.д.
Очень прошу помощи!!!
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
13.12.2008, 21:54
Ответы с готовыми решениями:

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

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

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

13
0 / 0 / 0
Регистрация: 30.11.2008
Сообщений: 13
15.12.2008, 00:23  [ТС]
Что никто незнает?
Думаю что нужно брать слово до пробела, переворачивать его, сравнивать с оригиналом, потом брать второе слово и ту же операцию и т.д.
Потом первые два слова->переворот->сравнение, потом 2е и 3е с теми же операциями.
Потом первые 3 слова и т.д. хотябы до 10и слов.
Может кто нить знает как это реализовать или подкинет свою идею?А то вообще потерялся с этой задачей.
Очень надо...помогите чем можете.
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
15.12.2008, 03:12
функция обращения строки
Code
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
 
#include <stdio.h>
 
#define MAXLINE  1000    /* максимальная длина строки */
 
/* обращает строку */
main()
{
    char *reverse(char []);
    char line[MAXLINE] = "разные слова палиндромы";
    
    printf("%s\n", reverse(line));
    return 0;
}
 
/* reverse: обращает строку s */
char *reverse(char s[])
{
    char *p, *q;
    int c;
    
    p = q = s;
    while (*q)
        q++;
    q--;
    for ( ; p < q; p++, q--)
        c = *p, *p = *q, *q = c;
    return s;
}
тебе надо проверять каждое слово, если оно палиндром записывать его куда-то
фразы полиндромы не делай, не потянешь (просто время потеряешь), по сложности смахивает на калькулятор вроде всё просто а подводных камней куча

АРОЗАУПАЛАНАЛАПУАЗОРА
проверяешь всё нормально вроде

УПАЛАНАЛАПУПАЛАНАЛАПУПАЛАНАЛАПУ
проскань попробуй
1
0 / 0 / 0
Регистрация: 30.11.2008
Сообщений: 13
15.12.2008, 19:19  [ТС]
Спасибо за разъяснение.
Только текст проги написан на С++(если не ошибаюсь) а нельзя ли написать на Си?Буду весьма признателен.
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
16.12.2008, 05:48
Code
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 <stdio.h>
#include <string.h>
 
#define MAXLINE  1000    /* максимальная длина строки */
#define MAXWORD  100     /* максимальная длина слова  */
 
/* ищет в тексте слова палиндромы и числа палиндромы;
   без переносов; на винде оба языка на лине только инглиш */
main()
{
    char *reverse(char []);
    char line[MAXLINE], word[MAXWORD], tmp[MAXWORD], *p;
    int nc;
    
    while ((p = fgets(line, MAXLINE, stdin)) != NULL) {
        while (sscanf(p, "%s%n", word, &nc) == 1) {
            p += nc;
            strcpy(tmp, word);
            if (strcmp(word, reverse(tmp)) == 0 && strlen(word) > 1)
                printf("%s\n", word);
        }
    }        
    return 0;
}
 
/* reverse: обращает строку s */
char *reverse(char s[])
{
    char *p, *q;
    int c;
    
    p = q = s;
    while (*q)
        q++;
    for (q-- ; p < q; p++, q--)
        c = *p, *p = *q, *q = c;
    return s;
}
2
0 / 0 / 0
Регистрация: 30.11.2008
Сообщений: 13
17.12.2008, 21:25  [ТС]
нифига не пашет.
зодолбалсо уже дописывать, приписывать, переписывать - не хочет и все
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
17.12.2008, 22:01
скомилируй и в командной строке выполни

echo "aba no 101 02 шалаш" | program.exe
должна найти под виндовс
aba
101
шалаш

под линем русские символы двубайтовые получаются и длина слова в два раза больше
1
0 / 0 / 0
Регистрация: 30.11.2008
Сообщений: 13
17.12.2008, 23:39  [ТС]
Заработала Спасибо.
Только почемуто работает она бесконечно.Ограничить бы её надо как нить.
Типа "введите количество строк".Как тока последнюю строку написал-выводит полиндромы и вырубается.
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
18.12.2008, 00:20
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
main()
{
    char *reverse(char []);
    char line[MAXLINE], word[MAXWORD], tmp[MAXWORD], *p;
    int nc;
    
    while ((p = fgets(line, MAXLINE, stdin)) != NULL) {
        if (p[0] == '\n' || (p[0] == '\r' && p[1] == '\n'))
            break;
        while (sscanf(p, "%s%n", word, &nc) == 1) {
            p += nc;
            strcpy(tmp, word);
            if (strcmp(word, reverse(tmp)) == 0 && strlen(word) > 1)
                printf("%s\n", word);
        }
    }        
    return 0;
}
пустая строка выход с учётом винды (если будешь файлы подключать потом)
1
0 / 0 / 0
Регистрация: 30.11.2008
Сообщений: 13
24.12.2008, 17:00  [ТС]
Спасибо все работает.
Кстати а можно как нибыдь удалять знаки препинания из введеной строки(чтоб уж препод к этому не придрался )?
Например:
Шалаш в лесу! Слово шалаш разпознается как полиндром.
В лесу шалаш! Слово шалаш не распознается. тк ! лишний символ
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
25.12.2008, 02:43
Code
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
 
#include <stdio.h>
#include <ctype.h>
#include <string.h>
 
#define MAXLINE  1000    /* максимальная длина строки */
#define MAXWORD  100     /* максимальная длина слова  */
 
/* ищет в тексте слова палиндромы и числа палиндромы;
   без переносов; на винде оба языка на лине только инглиш */
main()
{
    char *reverse(char []);
    char line[MAXLINE], word[MAXWORD], tmp[MAXWORD], *p, *q;
    int nc;
    
    while ((p = fgets(line, MAXLINE, stdin)) != NULL) {
        if (p[0] == '\n' || (p[0] == '\r' && p[1] == '\n'))
            break;
        for (q = p; *q != '\0'; q++)
            if(ispunct(*q))
                *q = ' ';
        while (sscanf(p, "%s%n", word, &nc) == 1) {
            p += nc;
            strcpy(tmp, word);
            if (strcmp(word, reverse(tmp)) == 0 && strlen(word) > 1)
                printf("%s\n", word);
        }
    }        
    return 0;
}
 
/* reverse: обращает строку s */
char *reverse(char s[])
{
    char *p, *q;
    int c;
    
    p = q = s;
    while (*q)
        q++;
    for (q-- ; p < q; p++, q--)
        c = *p, *p = *q, *q = c;
    return s;
}
короче не рискнул if (!isalpha(*q) && !isdigit(*q)), т.к. может не распознать русские буквы как буквы
0
 Аватар для _д_м_и_т_р_и_й_
0 / 0 / 0
Регистрация: 11.02.2011
Сообщений: 38
15.08.2011, 11:30
извинити за идиотский вопрос, просто я только недавно начал Си изучать и не все еще разобрал. как нужно изминить ваш код, что бы слова полиндромы не выводило на экран, а удаляло из строки и выводило измененную строку. подскажите пожалуйста.
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
17.08.2011, 01:40
Цитата Сообщение от _д_м_и_т_р_и_й_
как нужно изминить ваш код, что бы слова полиндромы не выводило на экран, а удаляло из строки и выводило измененную строку
эту не поменяешь, так как она не сохраняет первоначальную строку (удаляет знаки пунктуации)

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
#include <stdio.h>
#include <string.h>
 
#define MAXLINE  1000   /* максимальная длина строки */
 
void del_char(char *s, int ch);
int is_palind(const char *s);
void replace(char *s, const char *from, const char *to);
 
/* чтобы слова полиндромы не выводило на экран,
 * а удаляло из строки и выводило измененную строку
 */
int main(void)
{
    char line[MAXLINE], tmp[MAXLINE], *p;
    
    while (fgets(line, sizeof line, stdin) != NULL) {
        strcpy(tmp, line);
        del_char(tmp, '\n');
        for (p = strtok(tmp, " ");
             p != NULL;
             p = strtok(NULL, " "))
            if (is_palind(p)) {
                printf("word: %s\n", p);
                replace(line, p, "");
            }
        printf("%s", line);
    }
    return 0;
}
 
/* должна удалять все символы ch из s */
void del_char(char *s, int ch)
{
    *strrchr(s, ch) = '\0';
}
 
int is_palind(const char *s)
{
    const char *p, *q;
    
    p = s;
    q = s + strlen(s) - 1;
    for ( ; *p == *q && p < q; p++, q--)
        ;
    return p >= q;
}
 
/* должна заменять все вхождения from на to в s */
void replace(char *s, const char *from, const char *to)
{
    printf("repl\n");
}
функция замены осталась

Code
1
2
3
4
5
6
7
8
[guest@localhost tests]$ ./t
aasdflkj 111 lkasjdflkj 333
word: 111
repl
word: 333
repl
aasdflkj 111 lkasjdflkj 333
[guest@localhost tests]$
палиндромы она видит
1
 Аватар для xAtom
935 / 760 / 299
Регистрация: 09.12.2010
Сообщений: 1,346
Записей в блоге: 1
17.08.2011, 10:02
Blade , ещё вариант по вашей задачи
_д_м_и_т_р_и_й_ , и ваш вариант по вашей задачи.
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
#include <stdio.h>
#include <ctype.h>
#include <string.h>
 
char* p_strrev(char* str);
int   p_ispoli(const char* str);
int   p_findpoli(const char* str, char* s);
void  str_erase(char* str, char* s);
void  print_poli(char* str, int ignore);
 
int  main(void) {
 
    char buf[128] = "The Super ATTA PPP, 5555, 55, 4 [repuS], adam-mada, optionals.";
//  gets(buf);
 
    print_poli(buf, 0);  // выводим список найденных палиндромов
 
    printf("src: %s\n", buf);  // исходная строка
    print_poli(buf, 1); // удалить все палиндромы из строки
    printf("dst: %s\n", buf);     // показать её
 
    getchar();
    return 0;
}
 
 
// реверсия строки
char* p_strrev(char* str) {
   char* s = str + (strlen(str)-1), ch, *tmp = str;
   while(str < s) {
       ch   = *str;
       *str = *s;
       *s   = ch;  
       ++str;
       --s;
   } 
   return tmp;
}
 
// сравнение на палиндром слова ABBA = true, ALKA = false
int   p_ispoli(const char* str) {
    const char* ls = str + (strlen(str)-1);
    for(; str < ls && *str == *ls; ++str, --ls);
    if(str == ls || ! ~(ls - str))
         return 1;
    return 0;
}
 
// поиск в строке палиндрома ABC = CBA
int  p_findpoli(const char* str, char* s) {
    if((str = strstr(str, s))) {
        if(! isalnum( *(str + strlen(s)) ))
                      return 1;
    }
    return 0;
}
 
 
// удаление из строки слова, str = "The ocean, ocean..." -> str_erase(str, "ocean") -> "The, ..." 
void  str_erase(char* str, char* s) {
    char* a, *b;
    int   len;
    do {
       for(a = str, b = s; *a == *b; *a++, *b++);
           if(! *b) {
                for(len = strlen(s); len; len--)
                      for(a = str, b = str + 1; *a; *a++ = *b++);
           }
    } while( *str++ );
}
 
 
// вот самая функция по выводу палиндромов ignore = 0, или удаление  палиндромов из строки ignore = 1
void  print_poli(char* str, int ignore) {
      char buf[48], *i, *src = str;
      while( *src ) {
           for(i = buf; isalnum(*src) && *src; *i++ = *src++);
           *i    = '\0';
           if(strlen(buf) > 1) {
                    if(p_ispoli(buf)) {
                           if(! ignore) 
                                 puts(buf);
                           else {
                                 str_erase(str, buf);
                                 src = str;
                           }
                    } else {
                        if(p_findpoli(src, p_strrev(buf))) {
                             if(! ignore) {
                                 puts(p_strrev(buf));
                                 puts(p_strrev(buf));
                             } else { 
                                 str_erase(str, buf);
                                 str_erase(str, p_strrev(buf));
                                 src = str;
                             }
                         }
                   }
             }
             for(; ! isalnum(*src) && *src; *src++);
    }
}
"The Super ATTA PPP, 5555, 55, 4 [repuS], adam-mada, optionals."
Результат:
Super
repuS
ATTA
PPP
5555
55
adam
mada

src: The Super ATTA PPP, 5555, 55, 4 [repuS], adam-mada, optionals.
dst: The , , , 4 [], -, optionals.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
17.08.2011, 10:02
Помогаю со студенческими работами здесь

В данном тексте найти все слова-палиндромы и вывести их на экран
Проблема в том, что при вводе двух и более знаков препинания подряд (включая пробелы) программа начинает работать неправильно. Помогите...

Дан текст.Найти все палиндромы(слова-перевёртыши)в етом тексте
Доброго времени суток ув.форумчане!Нужна ваша помощь в решении задачи по программированию.Язык програмирования-Delphi7.Задача состоит в...

Найти все палиндромы, не превышающие 100, которые при возведении в квадрат также дают палиндромы
Натуральное число называется палиндромом, если его запись читается одинаково с начала и с конца (например, 4 884, 393, 1). Найти все...

Найти числа от 1 до 99 - палиндромы, которые при возведении в квадрат также дают палиндромы (используя циклы)
Задание: Натуральное число является палиндромом, если его запись читается одинаково с начала и с конца (как, например , 393, 1). Найти...

Найти целые числа палиндромы, которые при возведении в квадрат также дают палиндромы (22^2=484)
Найти целые числа-палиндромы, которые при возведении в квадрат также дают палиндромы (22^2=484) Находил решение этой задачи в инете, но...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru