我已经对程序进行了检查,如果一个单词是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.
答案 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;