2015-11-29 58 views
2

我必须写在帕斯卡尔的程序,检查一个词是否是一个回文。检查是否字回文与功能

例如:

如果I输入 “ABBA” 然后写 'TRUE'

输入 'ABB一个' 然后写 '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;