标题:Delphi菜鸟问题请教下!
只看楼主
爱像深蓝
Rank: 1
等 级:新手上路
帖 子:52
专家分:0
注 册:2007-7-10
 问题点数:0 回复次数:11 
Delphi菜鸟问题请教下!


小弟刚学delphi还是菜菜鸟一个,请各位会的大侠高手们指点一二,不胜感激!
在下声明了两个函数:
function IsAlphabet(c:char):boolean;
function IsWord(s:String):boolean;

IsAlphabet是传入一个字符判断这个字符是否为字母
下面是函数实现
function IsAlphabet(c:char):boolean;
begin
if((c >= 'a' ) and ( c <= 'z')) or (( c >= 'A') and (c <= 'Z')) then
Result:= True
else
Result:= False;
end;


我在别处调用这个IsAlphabet函数时,结果得不到返回值
var
str:string;
i:integer;
begin
str := 'I love U';
i := 1;
while not i <= length(str) do
begin
if not IsAlphabet(str[i]) then
Result:=false;
Inc(i);
end;
Result:=true;
end;
问题就出在我标注的红字这:
IsAlphabet(str[i])
为什么我这里调式时得不到返回值,即true和false都得不到.这是为什么呢?

小弟刚学delphi还是菜菜鸟一个,请各位会的大侠高手们指点一二,不胜感激!

注其实是没有 "\"这个符号的.但是不加就发不上去方括号!

[此贴子已经被作者于2007-8-5 9:49:06编辑过]

搜索更多相关主题的帖子: Delphi 
2007-08-05 09:47
anthony634
Rank: 6Rank: 6
来 自:西南交大
等 级:贵宾
威 望:24
帖 子:653
专家分:10
注 册:2006-6-8
得分:0 
while not i &lt;=  length(str) do 这里死循环哦 not i 先运算的 你这里的意思是I比他小,应该是这样吧 while i &lt;=  length(str) do
2007-08-06 10:49
anthony634
Rank: 6Rank: 6
来 自:西南交大
等 级:贵宾
威 望:24
帖 子:653
专家分:10
注 册:2006-6-8
得分:0 

另外在delphi 里, 执行到result,程序不会停止,所以你后面的函数永远是true 应该改为:

var
str:string;
i:integer;
begin
Result:=true;
str := 'I love U';
i := 1;
while i <= length(str) do
begin
if not IsAlphabet(str[i]) then
Result:=false;
Inc(i);
end;
end;

2007-08-06 10:51
爱像深蓝
Rank: 1
等 级:新手上路
帖 子:52
专家分:0
注 册:2007-7-10
得分:0 
不好意思.写错了.
while not i > length(str) do

不过问题不是在这里.

我写的函数居然进不到返回值.
var
isTrue:boolean;

begin
isTrue:=IsAlphabet('a'):boolean;

end;
这里是我打比方,问题就在于这个isTrue 这个布尔型变量得不到值.不论是false还是true都得不到...
2007-08-07 17:45
anthony634
Rank: 6Rank: 6
来 自:西南交大
等 级:贵宾
威 望:24
帖 子:653
专家分:10
注 册:2006-6-8
得分:0 
发你的代码来看下,这样我看不出来为什么得不到, 如果IsAlphabet('a')是上面你说的那个函数,应该不会这样的
2007-08-07 18:42
nongen
Rank: 5Rank: 5
来 自:网络
等 级:贵宾
威 望:17
帖 子:322
专家分:0
注 册:2006-11-25
得分:0 
function a(c:char):boolean;
begin
if((c >= 'a' ) and ( c <= 'z')) or (( c >= 'A') and (c <= 'Z')) then
a:=true
else
a:=false;
end;
procedure TForm1.FormCreate(Sender: TObject);
var s:string;
begin
s:=edit1.Text;
if a(s[1]) then
edit2.Text:='True'
else
edit2.Text:='False'
end;

============================
以上测试通过。。。。。。你的程序不全,没法测试。。。

昨天不是我的,明天不是你的,今天却是我们的。
http://www.
2007-08-08 12:36
nongen
Rank: 5Rank: 5
来 自:网络
等 级:贵宾
威 望:17
帖 子:322
专家分:0
注 册:2006-11-25
得分:0 

program Project1;

{$APPTYPE CONSOLE}

uses
SysUtils;
function a(c:char):boolean;
begin
if((c >= 'a' ) and ( c <= 'z')) or (( c >= 'A') and (c <= 'Z')) then
Result:= True
else
Result:= False;
end;
function b(s:string):boolean;
var
str:string;
i:integer;
begin
str := 'I love U';
i := 1;
while not (i <= length(str)) do//这里我加了括号 ,其它的基本没动。。。。。
begin
if not a(str[i]) then
Result:=false;
Inc(i);
end;
Result:=true;//这句啊,真损 ,,不管你是啥,输出都是true;
end;
{上面这个函数改一下或许就是了。
==========================
function b(str:string):boolean;
var
i:integer;
f:boolean;
begin
i := 1;
f:=true;
while (i <= length(str)) and f do
begin
if not a(str[i]) then
f:=false
else
f:=true;
Inc(i);
end;
Result:=f;
end;

}

var aaa:string;
nnn:boolean;
begin
readln(aaa);
nnn:=b(aaa);
writeln(nnn);
readln(aaa);
{ TODO -oUser -cConsole Main : Insert code here }
end.
==================================
以上程序测试通过。。。。不知道楼主怎么弄的?

[此贴子已经被作者于2007-8-8 12:56:08编辑过]


昨天不是我的,明天不是你的,今天却是我们的。
http://www.
2007-08-08 12:43
爱像深蓝
Rank: 1
等 级:新手上路
帖 子:52
专家分:0
注 册:2007-7-10
得分:0 

这是我写的单元文件,里面有两个方法,isAlphabet()判断是字符是否为字母返回true或false
isWord从逻辑上判一个字符串是否为字母例 str1这就不是.str是.所以只是逻辑上
下面是完整的源码.于我打红字的地方有问题!
unit StrFunc;

interface
uses SysUtils,classes;

function IsAlphabet(ch:char):boolean;
function IsWord(str:String):boolean;

implementation
function IsAlphabet(ch:char):boolean;
var
foo:boolean;
begin
foo:= false;
if((ch >= 'a') and (ch <= 'z')) or ((ch >='A') and (ch <='Z')) then
begin
foo:=true;//如果此字符ASCII值在a-z或A-Z之间说明此字符是字母
end;
result:=foo;
//在这个方法中通过调试过程中的变量监视功能明显可看到result得到不同的值,即是a就true是1就false
end;
function IsWord(str:String):boolean;

var
i:Integer; //变量i只是增量
StrTemp:String; //接受trim之后的变量
foo:boolean;//结果

begin
strTemp := trim(str);
i := 1;
foo:=true;

while i <= Length(strTemp) do
begin
if not IsAlphabet(strTemp[i]) then //这里不论怎么弄得到的值都貌似true即是字母.哪怕123也可以..汗.
begin
foo:= false; //如果有一个字符不是字符那么这个单词就一定不是单词
end;

Inc(i); //注这里的INC函数相当于我们C/C++中的i++;
//即Index++ 在delphi里可表示为Inc(Index)
end;

result := true; //说句实话个人非常不喜欢delphi这种语法大小写的result都可以.
//函数的返回值有多种方法result可以函数名也可以.巨汗ing.

end;

end.





这是完整的源代码.问题就出在我标红字的地方.

[此贴子已经被作者于2007-8-10 12:06:31编辑过]

2007-08-10 12:00
anthony634
Rank: 6Rank: 6
来 自:西南交大
等 级:贵宾
威 望:24
帖 子:653
专家分:10
注 册:2006-6-8
得分:0 

function IsWord(str:String):boolean;

var
i:Integer; //变量i只是增量
StrTemp:String; //接受trim之后的变量
foo:boolean;//结果

begin
strTemp := trim(str);
i := 1;
foo:=true;

while i <= Length(strTemp) do
begin
if not IsAlphabet(strTemp[i]) then //这里不论怎么弄得到的值都貌似true即是字母.哪怕123也可以..汗.
// 这里没问题
begin
foo:= false; //如果有一个字符不是字符那么这个单词就一定不是单词
end;

Inc(i); //注这里的INC函数相当于我们C/C++中的i++;
//即Index++ 在delphi里可表示为Inc(Index)
end;

result := true; //说句实话个人非常不喜欢delphi这种语法大小写的result都可以.
// 问题在这里 永远返回都是true,之前你做的任何事情都是白费的。
//函数的返回值有多种方法result可以函数名也可以.巨汗ing.

end;

2007-08-10 12:35
anthony634
Rank: 6Rank: 6
来 自:西南交大
等 级:贵宾
威 望:24
帖 子:653
专家分:10
注 册:2006-6-8
得分:0 
回帖前最好看下前面的帖子,不然浪费了别人的劳动
2007-08-10 12:37



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-160408-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.061115 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved