【问题标题】:Checking if word is palindrome with function检查单词是否是具有功能的回文
【发布时间】:2015-11-29 21:37:45
【问题描述】:

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

例如:

如果我输入“abba”,则输入“TRUE”

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

输入'abca'写'FALSE'

这是我写的:

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.

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

【问题讨论】:

  • 在开始循环之前去掉所有空格。
  • 对不起,我看不懂你的语言,所以我不会读你的代码。在开始比较字符之前,只需去掉所有空格并转换为全部大写即可。
  • 我知道我必须去掉空格,但我不知道该怎么做:)

标签: algorithm pascal palindrome


【解决方案1】:

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

procedure RemoveSpacesInplace(var s: string);
var
  i, SpaceCount: Integer;
begin
  SpaceCount := 0;
  for i := 1 to Length(s) do
    if s[i] = ' ' then
      Inc(SpaceCount)
    else
      s[i - SpaceCount] := s[i];
  SetLength(s, Length(s) - SpaceCount);
end;

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

请注意,您对奇数和偶数长度的逻辑是多余的。尽量简化。

【讨论】:

    【解决方案2】:

    您可以为您的任务使用函数 StringReplace 和 ReverseString。

    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.  
    

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

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

    function   palindrom(slovo:string):boolean;
    var slovofor: string;
        slovorev: string;
        i: integer;
    begin
        for i:= length(slovo) downto 1 do begin
          if slovo[i] <> ' ' then begin
            slovofor := slovofor + slovo[length(slovo)-i+1];
            slovorev := slovorev + slovo[i];
          end;
        end;
        writeln(slovofor);
        Result := slovofor = slovorev
    end;                          
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-29
      • 2021-07-25
      • 2016-04-19
      • 2013-02-04
      • 1970-01-01
      • 2015-10-18
      • 2013-05-24
      • 1970-01-01
      相关资源
      最近更新 更多