Удалить из строки пробелы и определить, является ли она перевертышем
Задача
Вводится строка. Удалить из нее все пробелы. После этого определить, является ли она палиндромом (перевертышем), т.е. одинаково пишется как с начала, так и с конца.
Пояснение к задаче и алгоритм решения
Задача состоит из двух подзадач: 1) удаление всех пробелов из строки и 2) проверка строки на "палиндромность".
Для удаления пробелов надо перебрать по символам строку. Если очередной символ пробел, то удалить его. При этом следующий символ окажется на месте текущего, а значит не следует увеличивать значение счетчика. Если очередной символ не пробел, то надо перейти к проверке следующего, т.е. увеличить значение счетчика.
Для проверки, является ли строка палиндромом, надо сравнить первую и вторую половины строк. При этом половинки сравниваются так, что первый символ сравнивается с последним, второй - с предпоследним, третий - с третьим с конца, и т. д. То есть если длина строки l, а символ первой половины i, то символ второй половины имеет индекс l-i+1.
Pascal
Исходный код на языке программирования Pascal
s: string;
i,l: byte;
begin
readln(s);
l := length(s);
if l < 2 then exit;
i := 1;
while i <= l do begin
if s[i] = ' ' then begin
delete(s,i,1);
l := l - 1;
end
else
i := i + 1;
end;
writeln(s);
if l < 2 then exit;
for i:=1 to l div 2 do
if s[i] <> s[l-i+1] then begin
writeln('это не палиндром');
exit;
end;
writeln('это палиндром');
end.
Пример(ы) выполнения программы на языке Pascal
ракушкалежитнапеске...
это не палиндром
o nee no
oneeno
это палиндром
Язык Си
Исходный код на языке программирования C
#include <string.h>
#define N 100
main() {
char str[N];
int i, f;
i = 0;
while ((str[i] = getchar()) != '\n')
if (str[i] != ' ') i +=1;
str[i] = '\0';
printf("%s\n",str);
f = 1;
for (i=0; i < strlen(str); i++)
if (str[i] != str[strlen(str)-1-i]) {
printf("No\n");
f = 0;
break;
}
if (f == 1) printf("Yes\n");
}
Пример(ы) выполнения программы на языке C
90w!w09
Yes
Особенности решения на языке программирования C
Здесь при заполнении строки как массива символов исключаются пробелы.
Python
Исходный код на языке программирования Python
s = s.split()
s_ = ''
for i in s:
s_ += i
print(s_)
l = len(s_)
i = 0
f = 1
while i < l//2:
if s_[i] != s_[-1-i]:
print('Не палиндром')
f = 0
break
i += 1
if f == 1:
print('Палиндром')
Особенности решения на языке программирования Python
Для того, чтобы убрать из строки пробелы, она сначала преобразуется в список слов с помощью метода split(), который разделяет строку по пробелам. После этого собирается новая строка из элементов списка.
При проверке строки, является ли она палиндромом, используется индексация не только с начала, но и с конца.
КуМир
Исходный код на языке программирования КуМир
нач
лит s
цел i, l, f
ввод s
l := длин(s)
нц пока s[l] = " "
l := l-1
s := s[1:l]
кц
i := 1
нц пока i <= l
если s[i] = " " то
s := s[1:i-1] + s[i+1:l]
l := l - 1
иначе
i := i + 1
все
кц
вывод s, нс
f := 1
нц для i от 1 до div(l,2)
если s[i] <> s[l-i+1] то
вывод "Это не палиндром"
f := 0
выход
все
кц
если f = 1 то
вывод "Палиндром"
все
кон
Basic-256
Исходный код на языке программирования Basic
arr$ = explode(str$," ")
str$ = ""
for i=0 to arr$[?] - 1
str$ = str$ + arr$[i]
next i
print str$
l = length(str$)
for i=1 to l\2
if mid(str$,i,1) <> mid(str$,l-i+1,1) then
print "no"
end
endif
next i
print "yes"
Пример(ы) выполнения программы на языке Basic
89898
yes
Особенности решения на языке программирования Basic
Функция explode() разбивает строку на подстроки по указанному разделителю. При этом создается массив, состоящий из подстрок.