检查单词是否是具有功能的回文

时间:2015-11-29 21:37:46

标签: algorithm pascal palindrome

我必须在Pascal中编写一个程序来检查单词是否是回文。

例如:

  

如果我输入" abba"然后写上“TRUE'

”      

输入' abb a'然后写上“TRUE'

”      

输入' abca'写'错误'

我写了这个:

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.

但它必须忽略空格。你有什么想法吗?

2 个答案:

答案 0 :(得分:1)

要删除所有空格,您可以使用以下函数:

credential.helper

您可以将其修改为其他非字母字符。

请注意,奇数和偶数长度的逻辑过多。尽量简化它。

答案 1 :(得分:1)

您可以使用StringReplace和ReverseString函数来完成任务。

SELECT AVG(jl.[Stock Weight]) 
FROM dbo.[Settlement Line] jl 
WHERE jl.[Vendor No_] = 8516
    AND jl.[Slaughter Date] BETWEEN '20151101' AND '20151130'
    AND jl.[Item No_] BETWEEN '17000' AND '17099'

如果不允许使用SysUtils和StrUtils,则可以手动反转字符串,然后比较原始字符串和反向字符串是否相等。

这看起来像这样:(未经过测试!)

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.