Delphi 子范围声明的问题
我试图使它一旦不同的文本输入形状将改变颜色,但它说有一个问题('a..'Z')是“预期的”),但收到了字符串文字“a”。我不知道该怎么解决。感谢您的帮助,谢谢Delphi 子范围声明的问题,delphi,delphi-2010,Delphi,Delphi 2010,我试图使它一旦不同的文本输入形状将改变颜色,但它说有一个问题('a..'Z')是“预期的”),但收到了字符串文字“a”。我不知道该怎么解决。感谢您的帮助,谢谢 type TCapitalLetter = ('A' .. 'Z' ); //subrange of type char TDigit = ('0' .. '9' ); //subrage of type char 你的定义很接近,但并不完全正确: type TCapitalLetter = 'A'..'Z'; TDig
type
TCapitalLetter = ('A' .. 'Z' ); //subrange of type char
TDigit = ('0' .. '9' ); //subrage of type char
你的定义很接近,但并不完全正确:
type
TCapitalLetter = 'A'..'Z';
TDigit = '0'..9';
不过,从你的另一个问题来看,我认为这不是你真正需要做的。您正在寻找成员资格(该类型中包含一些字符),在这种情况下,您需要使用集合来完成。这是一个控制台应用程序,您只需编译和测试即可:
program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils;
type
TCapitalLetters = TSysCharSet;
TDigits = TSysCharSet;
const
CapitalLetters: TCapitalLetters = ['A'..'Z'];
Digits: TDigits = ['0'..'9'];
var
Temp, Output: string;
Ch: Char;
begin
Output := '';
Temp := 'Seems A Nice Test Answer';
for Ch in Temp do
if CharInSet(Ch, CapitalLetters) then
Output := Output + Ch;
WriteLn(Output);
ReadLn;
end.
对于Delphi的早期(非Unicode)版本,您需要使用set of Char
而不是TSysCharSet
,并对set成员资格使用稍微不同的语法:
program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils;
type
TCapitalLetters = set of Char;
TDigits = set of Char;
const
CapitalLetters: TCapitalLetters = ['A'..'Z'];
Digits: TDigits = ['0'..'9'];
var
Temp, Output: string;
Ch: Char;
begin
Output := '';
Temp := 'Seems A Nice Test Answer';
for Ch in Temp do
if Ch in CapitalLetters then
Output := Output + Ch;
WriteLn(Output);
ReadLn;
end.
测试应用程序的输出:
“它说有问题”并不是对我们有用的问题描述。您从编译器得到的确切错误消息是什么?(是的,我知道问题是什么以及如何解决它,但你需要先解决你的问题并加以改进。)从这个“问题”你可能可以看出我缺乏经验。我可能遗漏了一些非常简单的问题,所以我不认为我需要扩展更多内容。我试图解释如何在这里写出更好的问题,以便您可以更快地获得帮助。编译器错误消息就在您面前;绝对没有理由不把它包括在你的问题中。如果你想让我们给你时间来帮助解决你的问题,你至少可以给我们你已有的信息,我们可以使用这些信息。好吧,我已经将代码更改为你在我上一个问题“Delphi 2010密码强度表”(顺便说一句,谢谢)中帮助解决的代码,但这次('A'…'Z')有一个错误表示:应为),但收到字符串文字“a”。我将尝试编辑此问题。。。如果有帮助的话。我不知道你在这里粘贴代码时在做什么,但每次在每行末尾都有50多个尾随空格字符,这会破坏格式。我(又)把它修好了。你可以看到,你可以在输入问题时预览它(就在你正在键入的区域的正下方),这样你就可以看到当你发布它时它会是什么样子,对吗?实际上,只需要删除括号。。。我知道这会很小。而你的第二个建议,这是一个很好的想法,但不是一个密码强度米像我试图使。谢谢你。我现在的代码仍然存在一些问题,在任何文本完全退格之前,形状根本不会改变颜色。我明天会进一步调查这件事。再次感谢!您的“密码强度表”将需要遍历用户输入的文本,以查看输入的上限、下限和位数,对吗?我在第二个示例中使用的代码将允许您这样做,如果您添加对小写和数字的测试,并实现计数器,而不仅仅是收集字母。遗憾的是,字符集不会在Unicode Delphi中编译。在任何情况下,使用诸如TCharacter.IsUpper等字符属性测试程序都会更简洁。@David:事实上,它确实可以编译,尽管它会生成一个关于使用
CharInSet
的提示(在XE5的新控制台应用程序中测试)。不过,我会更新我已经更新的以反映两者。这个问题(在我提到的另一篇文章中)清楚地询问了“A”…'Z'和“0”…'9';不过,我同意Unicode的合适方法是使用TCharacter
功能。(也看看原来问题的修订历史。)我对修订历史没有那么在意。不确定字符集是如何编译的。也许编译器作弊了!当然它不会让我做一套词!无论如何,不管用户是否承认ASCII以外的字符,温柔地提醒他们拉丁语不是唯一的水果总是一个好办法。