判断回文
delphi吧
全部回复
仅看楼主
level 1
空心V太阳 楼主
自学了delphi十来天,碰到一个判断回文的问题,在网上找了半天,用delphi编的有关回文判断的代码,几乎没看到,于是自编了一个,编译运行后,还算正常,但发现有这样一个问题:当编辑框输入121时,正确判断是回文,但输入1211或是12111都判断成了是回文,不知道怎么回事?(也是在回文后添加一个或多个与回文最后一个字符相同的字符都会判断成回文)
代码如下:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls,StrUtils;
type
TForm1 = class(TForm)
Label1: TLabel;
Edit1: TEdit;
Button1: TButton;
Label2: TLabel;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
i,j:Integer;
chr:string;
begin
i:=1;j:=0;
chr:=Edit1.Text;
while i<=Length(Edit1.Text)/2 do
begin
if leftstr(chr,1)<>rightstr(chr,1) then
j:=1; Break;
i:=i+1;
chr:=Copy(chr,2,Length(chr)-1);
end;
if j=1 then
Label2.Caption:=Edit1.Text+'不是回文'
else
Label2.Caption:=Edit1.Text+'是回文';
end;
end.
2015年07月29日 01点07分 1
level 1
空心V太阳 楼主
没有回复吗,自己顶一下,高手来啊
2015年07月29日 01点07分 2
level 13
没搞过这类问题,好像没什么实际意义。
2015年07月29日 02点07分 3
level 13
你的循环判断有问题,只判断第一个只能处理最简单 情况
2015年07月29日 02点07分 4
level 6
直接用reversestring 判断与原string是否相等 即可
2015年07月29日 02点07分 5
很明显第一个就满足了 你就跳出去了 break是个多余的东西
2015年07月29日 02点07分
@yubiaohyb 关键是:输入1211或是12111都判断成了是回文
2015年07月29日 02点07分
@yubiaohyb 直接运用了reversestring函数,谢谢
2015年07月29日 02点07分
回复
����V̫��
:肯定是回文 你自己用脑看不出来就用手试试 很明显是逻辑出问题了 如果不同就直接退出标记重置 而不应该是相同标记重置跳出循环[呵呵]
2015年07月29日 02点07分
level 1
空心V太阳 楼主
虽然直接运用reversestring 函数能解决判断回文的问题,但上面这段代码的问题在哪,我还是没看出来。
2015年07月29日 02点07分 7
你直接跳出全部循环了,把breack改为exit
2015年07月29日 03点07分
@xuchuantao17 错了是break改为exit
2015年07月29日 03点07分
level 9
我看了下,首先,判断左边一位和右边一位不等的时候,不管它等不等,都会到break那里,所以,你后面的判断都没意义了,建议在then后面加个begin,在break后面加个end
2015年07月29日 07点07分 8
1