回 帖 发 新 帖 刷新版面

主题:本人初学DELPHI,向大侠们请教一下

很简单的把一字符串中的非元音字母颠倒,然后再全部颠倒一次,可我不知道哪里错了,总运行不出来,我真的不知道到底哪错了,谁能帮我看看么?谢谢!!真的非常感谢~~~!!!!
程序源文件我如下,谁能帮我解决一下我真的很很很感谢!!-
unit mima;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Button1: TButton;
    Memo1: TMemo;
    procedure Button1Click(Sender: TObject);
    procedure Edit1KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
  const
        stacksize=1000;
         type
           elementype=char;
 stack=class
             top:word;
          element:array[1..stacksize] of elementype;
          constructor init;
          destructor done;
          function isempty:boolean;
          function isfull :boolean;
          procedure push(item:elementype);
          procedure pop (var item:elementype);
         end;
 procedure pp;
 var
  Form1: TForm1;
    astack:stack;
    bstack:stack;
     m:integer;      //输入的字符串长度
     str1:string;     // 输出
     str:string;      //EDIT。TEXT内容

implementation

{$R *.dfm}
  constructor stack.init;
    begin
     top:=0;
      end;
destructor stack.done;
begin
end;
function stack.isempty:boolean;
  begin
    isempty:=top=0
end;
function stack.isfull:boolean;
  begin
    isfull:=top=stacksize;
end;
procedure stack.push(item:elementype);
  begin
       top:=top+1;
       element[top]:=item;

  end;
procedure stack.pop(var item:elementype);
    begin
      item:=element[top];
      top:=top-1
        end;
procedure pp;
var
it,p:char;
i:integer;
  begin
    astack.init;
    bstack.init;
for i:=1 to m  do
      astack.push(str[i]);
      while (not astack.isempty)  do
        begin
          astack.pop(p);
          if (p<>'a') and(p<>'e') and (p<>'i')and (p<>'o') and (p<>'u') then
            bstack.push(p)
        else
          begin
            while not bstack.isempty do
              begin
                bstack.pop(it);
                str1:=str1+it;
              end;
              str1:=str1+p;
              end;
         end;
         end;

   procedure TForm1.Button1Click(Sender: TObject);
begin
str1:=' ';
pp;
memo1.Lines.add(str1);
end;

procedure TForm1.Edit1KeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
   if key=VK_RETURN then
  str:=Edit1.text;
  m:=length(str);
end;


end.

回复列表 (共6个回复)

沙发


怎么没有人回呢???这个程序是很简单的,不用费什么脑子的,我只想要大家帮我看看我的EDIT控件BUTTON控件有没有用对,这是个很简单的字符串变换的程序,程序逻辑不会有问题的,只是谁帮我控件用法就可以了,不会浪费大家很多时间,谢谢哪位好心人啊......

板凳

这个,我不太懂,
但测试过

错误在下面里发生:
constructor stack.init;
    begin
     top:=0;//这个提示错误
      end;



procedure pp;//这里错误




procedure TForm1.Button1Click(Sender: TObject);//无错哦
begin
str1:='';
pp;//这个可能错;
memo1.Lines.Add(str1);//无错哦
end;

3 楼


对 我也测试过,但是就觉得这么个CONSTRUCTOR的语句应该不会错的吧,PP这个程序也不应该错啊...

4 楼

会不会是16进制和10进制问题出错,
我的测试过程是:
1、错误与Button1和edit1控件无关,这两个只是提供数据源和显示结果的作用,错误应在算式上;
2、去除pp;后无错,但不显示结果,就是说错误出在pp;里
procedure TForm1.Button1Click(Sender: TObject);
begin
str1:=' ';
memo1.Lines.add(str1);
end;

3、不去除pp;而去除astack.init;bstack.init;无出错,就是说错误出    astack.init;和bstack.init;里,而astack.init;bstack.init;与下面有关
constructor stack.init;
begin
top:=0;
end;

4、总结:调不成功时,多用排除法,就可以找出错误出在哪里了。




5 楼


呵呵你好厉害...对我后面调试也是到CONSTRUTOR INIT就卡住了,错误应该就在这里,可是这个..那么简单的几句话,不会有错吧..不就是个初始化么??

6 楼

是么?怎么又没人可??呵呵

我来回复

您尚未登录,请登录后再回复。点此登录或注册