检查Pascal中的单词是否为回文结构

时间:2013-12-07 19:29:34

标签: pascal palindrome

我已经对程序进行了检查,如果一个单词是palindrom。我已经在Java中完成了这几十次,但isPalindrom函数i从不递增,并返回false。我的计划有什么问题?

  program p1;
    var
    n,i:integer;
    slowo:string;

    function isPalindrom(s: string) : boolean;
    var
     dlugosc : integer;
     begin
      dlugosc := Length(s);

      for i:= 1 to dlugosc do
      begin
       writeln(i);  writeln('i = ', i, ' s[i] = ', s[i], 'dlugosc - i = ', dlugosc - i, 's[dlugosc - i] = ', s[dlugosc - i + 1]);
       if s[i] <> s[dlugosc - i] then
        begin
         exit(false);
        end;
      end;
      writeln('-------');
      exit(true);
     end;


    begin
     readln(slowo);
      if isPalindrom(slowo) = TRUE then
       begin
        writeln('is PALINDROM');
       end;
      if  isPalindrom(slowo) = FALSE then
       begin
        writeln('is not PALINDROM');
       end;



     readln;
    end.

2 个答案:

答案 0 :(得分:0)

问题是

          if s[i] <> s[dlugosc - i] then

我在1..length(字符串)的范围内。所以length(string)-i在length(string)-1的范围内.0。然而,为了向后检查一个字符串,它应该是length(string).. 1

所以将其改为

        s[dlugosc-(i-1)]

答案 1 :(得分:0)

我不喜欢跳出'for'循环的想法。您可以通过以下方式更清晰地编写您的回文功能

Function Palindrome (const s: string): boolean;
var
 i, len: integer;

begin
 i:= 0;
 len:= length (s);
 result:= true;
 while (i < len div 2) and result do
  begin
   inc (i);
   result:= s[i] = s[len + 1 - i]
  end
end;