检查单词在Pascal中是否为回文

检查单词在Pascal中是否为回文,pascal,palindrome,Pascal,Palindrome,我已经做了一个程序来检查一个单词是否是回文。我已经在Java中这样做了几十次,但是在这里的isPalindrom函数I中,从不递增,并且返回false。我的程序有什么问题 program p1; var n,i:integer; slowo:string; function isPalindrom(s: string) : boolean; var dlugosc : integer; begin dlugosc :=

我已经做了一个程序来检查一个单词是否是回文。我已经在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.
程序p1;
变量
n、 i:整数;
斯洛沃:弦;
函数isAlindrom(s:string):布尔值;
变量
dlugosc:整数;
开始
dlugosc:=长度(s);
对于i:=1到dlugosc do
开始
书面(i);writeln('i=',i',s[i]=',s[i],'dlugosc-i=',dlugosc-i',s[dlugosc-i]=',s[dlugosc-i+1]);
如果s[i]s[dlugosc-i]那么
开始
退出(假);
结束;
结束;
书面形式('----');
退出(真);
结束;
开始
readln(slowo);
如果isAlindrom(slowo)=真,则
开始
writeln(‘是回文’);
结束;
如果isAlindrom(slowo)=FALSE,则
开始
writeln('不是回文');
结束;
readln;
结束。
问题是

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

我不太喜欢跳出“为”的循环。您可以用以下方式更清晰地编写回文函数

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; 
函数回文(const s:string):布尔值;
变量
i、 len:整数;
开始
i:=0;
长度:=长度(s);
结果:=真;
而(i
您可以打印
的[dlugosc-i]=',s[dlugosc-i+1]但选中
s[dlugosc-i]
将其更改为
s[dlugosc-i+1]
您的“for”循环太长:它应该是“for i:=1到dlugosc div 2”。换句话说,您只需要将字符串的前半部分与后半部分进行比较。如果'slowo'的值是'hannah',那么您只需要比较前三个字母。我在java中就是这样做的,但在Pascal数组中,从1开始索引。是的,减去两个基于1的索引会相互抵消,这就是重点。再读一遍,注意范围。始终跟踪范围是这些问题的线索。如有必要,写出dlugosc-i。
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;