2015-11-29 56 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;