Изменить строку, оставив только слова палиндромы - C (СИ)
Формулировка задачи:
Здравствуйте.
Надо написать программу: дана строка символов, изменить строку, оставив только слова палиндромы.
Нашла похожую программу:
Только в конце каждое слово выводится отдельной строкой, а как сделать, чтобы выводилось в одну строку?
Помогите.
#include <stdio.h> #include <stdlib.h> int check(char *str) { int n = 0, m = -1; char *p = str; while(*p++) m++; if(n == m) return 0; while(n < m) if(str[n++]!=str[m--]) return 0; return 1; } int main() { char str[1000] = {0}; char temp[1000] = {0}; char *p; int i = 0; printf("%s", "Input string:"); gets(str); p = str; do{ if((*p >= 'A' && *p <= 'Z') || (*p >= 'a' && *p <= 'z')) { while(*p!=' ') { if(!*p) break; if((*p >= 'A' && *p <= 'Z') || (*p >= 'a' && *p <= 'z')) temp[i++] = *p; *p++; } i = 0; *p--; int n; for( n = 0; n < 1000; ++n); temp[n] = ' '; if(check(temp)==1) printf("Output string:%s\n",temp); } }while(*p++); system("pause"); return 0; }
Решение задачи: «Изменить строку, оставив только слова палиндромы»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> int main() { char str[1000] = {0}; char temp[1000] = {0}; char *p; int i = 0; printf("%s", "Input string:"); gets(str); p = str; printf("Output string:"); do{ if((*p >= 'A' && *p <= 'Z') || (*p >= 'a' && *p <= 'z')) { while(*p!=' ') { if(!*p) break; if((*p >= 'A' && *p <= 'Z') || (*p >= 'a' && *p <= 'z')) temp[i++] = *p; *p++; } i = 0; *p--; int n; for( n = 0; n < 1000; ++n); temp[n] = ' '; if(check(temp)==1) printf(" %s", temp); } }while(*p++); puts(""); system("pause"); return 0; }
Объяснение кода листинга программы
В этом коде на языке C происходит следующее:
- Объявляются три переменные:
str
(строка, в которую вводится исходная строка),temp
(строка, в которую будут добавляться палиндромы) иp
(указатель на текущий символ в строке). - Выводится приглашение для ввода строки.
- Вводится строка.
- Указатель
p
устанавливается на первый символ введенной строки. - В цикле
do-while
проверяется каждый символ строки. Если символ является буквой, он добавляется в строкуtemp
. - После прохождения каждого слова (отделяемого пробелами), проверяется, является ли это слово палиндромом. Если да, то это слово выводится на экран.
- В конце программы выводится приглашение нажатия любой клавиши для выхода из программы.
Код имеет некоторые проблемы:
- Он работает только для слов, состоящих только из букв.
- Он не обрабатывает случаи, когда в строке нет слов, или когда вся строка является палиндромом.
- Он не удаляет пробелы в начале и в конце слов.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д