Изменить строку, оставив только слова палиндромы - 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. - После прохождения каждого слова (отделяемого пробелами), проверяется, является ли это слово палиндромом. Если да, то это слово выводится на экран.
- В конце программы выводится приглашение нажатия любой клавиши для выхода из программы.
Код имеет некоторые проблемы:
- Он работает только для слов, состоящих только из букв.
- Он не обрабатывает случаи, когда в строке нет слов, или когда вся строка является палиндромом.
- Он не удаляет пробелы в начале и в конце слов.