Оглавление:
Задача — Удалить из строки пробелы и определить, является ли она перевертышем
— программирование на Pascal, Си, Кумир, Basic-256, Python
Вводится строка. Удалить из нее все пробелы. После этого определить, является ли она палиндромом (перевертышем), т.е. одинаково пишется как с начала, так и с конца.
Задача состоит из двух подзадач: 1) удаление всех пробелов из строки и 2) проверка строки на «палиндромность».
Для удаления пробелов надо перебрать по символам строку. Если очередной символ пробел, то удалить его. При этом следующий символ окажется на месте текущего, а значит не следует увеличивать значение счетчика. Если очередной символ не пробел, то надо перейти к проверке следующего, т.е. увеличить значение счетчика.
Для проверки, является ли строка палиндромом, надо сравнить первую и вторую половины строк. При этом половинки сравниваются так, что первый символ сравнивается с последним, второй — с предпоследним, третий — с третьим с конца, и т. д. То есть если длина строки l, а символ первой половины i, то символ второй половины имеет индекс l-i+1.
Pascal
var
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. ракушка лежит на песке .. .
ракушкалежитнапеске…
это не палиндром
o nee no
oneeno
это палиндром
Язык Си
#include <stdio.h>
#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] = »;
printf(«%sn»,str);
f = 1;
for (i=0; i < strlen(str); i++)
if (str[i] != str[strlen(str)-1-i]) {
printf(«Non»);
f = 0;
break;
}
if (f == 1) printf(«Yesn»);
} 90 w ! w 0 9
90w!w09
Yes
Здесь при заполнении строки как массива символов исключаются пробелы.
Python
s = input()
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(‘Палиндром’)
Для того, чтобы убрать из строки пробелы, она сначала преобразуется в список слов с помощью метода 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
input str$
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 l2
if mid(str$,i,1) <> mid(str$,l-i+1,1) then
print «no»
end
endif
next i
print «yes» 898 9 8
89898
yes
Функция explode() разбивает строку на подстроки по указанному разделителю. При этом создается массив, состоящий из подстрок.