2015-11-29 4 views
2

Мне нужно написать программу в Паскале, которая проверяет, является ли слово палиндром.Проверка, является ли слово палиндром функцией

Например:

если входные "авва", а затем записать 'TRUE'

вход 'АВВ а' затем записать 'TRUE'

вход 'ABCA' писать 'FALSE'

Я написал:

program palindromek; 

var i,j,delka,pul:integer; 
str:string; 
function palindrom(slovo:string):boolean; 

const mezera=32; 

begin 
    delka:=length(str); 

    if (delka mod 2) = 0 then pul:=delka div 2 
    else pul:=(delka-1) div 2; 

    for i:=1 to delka do 
    begin 
     if (ord(slovo[i])>=ord('a')) and (ord(slovo[i])<=ord('z')) then 
     begin 
      if (delka>=4)and(delka<=100) then 
       begin 
       if (length(str) mod 2) = 0 then {slovo se sudym poctem pismen} 
       begin 
       for j:=1 to pul do 
        begin 
        if slovo[j]=slovo[length(str)-j+1] 
        then palindrom:=true else palindrom:=false 
        end 
       end else 
       begin 
        for j:=1 to pul do 
        begin 
         if slovo[j]=slovo[length(str)-j+1] 
         then palindrom:=true else palindrom:=false 
        end 
       end 
      end else if slovo[1]=slovo[delka] 
      then palindrom:=true else palindrom:=false 
     end 
end; 
end; 
begin 
readln(str); 
writeln(palindrom(str)); 
end. 

, но он должен игнорировать пробелы. У вас есть идеи, пожалуйста?

+0

Газа все пробелы перед началом цикла. –

+0

Извините, я не могу читать ваш язык, поэтому я не буду читать ваш код. Просто разделите все пробелы и преобразуйте их во все прописные буквы, прежде чем начинать сравнивать символы. –

+0

Я знаю, что мне нужно вычеркнуть пробелы, но я не знаю, как это сделать :) – MatFyzak

ответ

1

Чтобы удалить все пробелы, вы можете использовать функцию следующим образом:

procedure RemoveSpacesInplace(var s: string); 
var 
    i, SpaceCount: Integer; 
begin 
    SpaceCount := 0; 
    for i := 1 to Length(s) do 
    if s[i] = ' ' then 
     Inc(SpaceCount) 
    else 
     s[i - SpaceCount] := s[i]; 
    SetLength(s, Length(s) - SpaceCount); 
end; 

Вы можете изменить его для других не буквенных символов.

Обратите внимание, что ваша логика для нечетной и четной длины является чрезмерной. Попробуйте упростить его.

1

Вы можете использовать функции StringReplace и ReverseString для своей задачи.

program palindromek; 
uses SysUtils, StrUtils; 

var 
    str:string; 

function palindrom(slovo:string):boolean; 
begin 
    slovo := StringReplace(slovo, ' ', '', [rfReplaceAll]); 
    Result := slovo = ReverseString(slovo) 
end; 
begin 
readln(str); 
writeln(palindrom(str)); 
readln; 
end. 

Если вы не можете использовать SysUtils и StrUtils, то вы можете вручную поменять местами строку, а затем сравнить, если исходная строка и обратная строка равны.

Это будет выглядеть примерно так: (! Не проверено)

function palindrom(slovo:string):boolean; 
var slovofor: string; 
    slovorev: string; 
    i: integer; 
begin 
    for i:= length(slovo) downto 1 do begin 
     if slovo[i] <> ' ' then begin 
     slovofor := slovofor + slovo[length(slovo)-i+1]; 
     slovorev := slovorev + slovo[i]; 
     end; 
    end; 
    writeln(slovofor); 
    Result := slovofor = slovorev 
end;