我必须在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.
但它必须忽略空格。你有什么想法吗?
答案 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.