Удалить из строки пробелы и определить, является ли она перевертышем

Задача

Вводится строка. Удалить из нее все пробелы. После этого определить, является ли она палиндромом (перевертышем), т.е. одинаково пишется как с начала, так и с конца.

Пояснение к задаче и алгоритм решения

Задача состоит из двух подзадач: 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.

Пример(ы) выполнения программы на языке Pascal

ракушка лежит на песке .. .
ракушкалежитнапеске...
это не палиндром

o nee  no
oneeno
это палиндром

Исходный код на языке программирования C

#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] = '\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

90 w  ! w 0 9  
90w!w09
Yes

Особенности решения на языке программирования C

Здесь при заполнении строки как массива символов исключаются пробелы.

Исходный код на языке программирования 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('Палиндром')

Особенности решения на языке программирования 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

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 l\2
        if mid(str$,i,1) <> mid(str$,l-i+1,1) then
                print "no"
                end
        endif
next i
 
print "yes"

Пример(ы) выполнения программы на языке Basic

898 9 8
89898
yes

Особенности решения на языке программирования Basic

Функция explode() разбивает строку на подстроки по указанному разделителю. При этом создается массив, состоящий из подстрок.

Тема

Строки

Уровень сложности

Средний

Дата публикации