Delphi 帕斯卡编码错误?

Delphi 帕斯卡编码错误?,delphi,pascal,Delphi,Pascal,我把这段代码输入到Delphi中,但出现了错误 运算符不适用于此操作数类型 我不知道这意味着什么,也不知道为什么会出现。我只想从一封格式为 isurnameyy@kjh.com 对不起,我承认我不能理解你的密码。你肯定走错了方向 但是,我可以向您展示一些非常简单的代码,这些代码应该可以帮助您: 请注意,我在写这段代码。但别担心,有人会很快纠正我的错误。:-) 这会给你你想要的东西。这需要一点计数(注意最后一行中需要“-1”),但这正是您想要的。对不起,但我承认我无法理解您的代码的头尾。你肯定走错

我把这段代码输入到Delphi中,但出现了错误

运算符不适用于此操作数类型

我不知道这意味着什么,也不知道为什么会出现。我只想从一封格式为

isurnameyy@kjh.com
对不起,我承认我不能理解你的密码。你肯定走错了方向

但是,我可以向您展示一些非常简单的代码,这些代码应该可以帮助您:

请注意,我在写这段代码。但别担心,有人会很快纠正我的错误。:-)


这会给你你想要的东西。这需要一点计数(注意最后一行中需要“-1”),但这正是您想要的。

对不起,但我承认我无法理解您的代码的头尾。你肯定走错了方向

但是,我可以向您展示一些非常简单的代码,这些代码应该可以帮助您:

请注意,我在写这段代码。但别担心,有人会很快纠正我的错误。:-)


这会给你你想要的东西。它需要一点计数(注意最后一行中需要“-1”),但这正是您想要的。

和,
运算符不适用于字符串。你的代码远远不是你所需要的

但我这里遇到的最大的批评是字符串处理与输出代码的混合。我将编写一个纯字符串处理助手

function DecodeEmailAddressOK(
  const Address: string;
  out Initial: string;
  out Surname: string;
  out Year: Integer
): Boolean;
var
  AtPos: Integer;
begin
  AtPos := Pos('@', Address);
  if AtPos < 5 then
    Exit(False);
  Initial := Copy(Address, 1, 1);
  Surname := Copy(Address, 2, AtPos-3);
  Result := TryStrToInt(Copy(Address, AtPos-2, 2), Year);
end;
函数decodeMailAddressOK(
常量地址:字符串;
out首字母:string;
出姓:弦;
输出年份:整数
):布尔值;
变量
AtPos:整数;
开始
AtPos:=Pos('@',地址);
如果AtPos<5,则
退出(假);
首字母:=副本(地址,1,1);
姓氏:=副本(地址2,AtPos-3);
结果:=TryStrToInt(副本(地址,AtPos-2,2),年份);
结束;

错误检查非常粗糙。我相信你能做得更好

和、
运算符不适用于字符串。你的代码远远不是你所需要的

但我这里遇到的最大的批评是字符串处理与输出代码的混合。我将编写一个纯字符串处理助手

function DecodeEmailAddressOK(
  const Address: string;
  out Initial: string;
  out Surname: string;
  out Year: Integer
): Boolean;
var
  AtPos: Integer;
begin
  AtPos := Pos('@', Address);
  if AtPos < 5 then
    Exit(False);
  Initial := Copy(Address, 1, 1);
  Surname := Copy(Address, 2, AtPos-3);
  Result := TryStrToInt(Copy(Address, AtPos-2, 2), Year);
end;
函数decodeMailAddressOK(
常量地址:字符串;
out首字母:string;
出姓:弦;
输出年份:整数
):布尔值;
变量
AtPos:整数;
开始
AtPos:=Pos('@',地址);
如果AtPos<5,则
退出(假);
首字母:=副本(地址,1,1);
姓氏:=副本(地址2,AtPos-3);
结果:=TryStrToInt(副本(地址,AtPos-2,2),年份);
结束;

错误检查非常粗糙。我相信你能做得更好

恐怕您完全误解了逻辑运算符
的含义。它们不用于字符串,而是用于布尔值(逻辑值,可以是
true
false

not
是一个一元运算符,如果操作数为
false
,则返回
true
;如果操作数为
true
,则返回
false
。因此,
not-true
产生
false
not-false
产生
true

例如,如果您有一个布尔变量
PasswordTooSimple
(键入的密码太简单),您可能希望在逻辑中的某个位置设置
CanContinue:=not PasswordTooSimple

是布尔型上的二进制运算符,当且仅当其两个操作数均为
true
时,该运算符返回
true
。例如,
CanContinue:=ValidUser和not PasswordTooSimple

是布尔型上的二进制运算符,当且仅当其至少一个操作数为真时,该运算符才返回
true
。例如,
CanContinue:=(PaymentComplete或nonmersialversion)而不是passwordtosimple

如果
PaymentComplete
nonmersialversion
PasswordTooSimple
分别为
false
true
false
,那么,应用这些规则,我们发现
PaymentComplete或nonmersialversion
将计算为
true
not PasswordTooSimple
将计算为
true
,因此——整个表达式
(PaymentComplete或nonmersialversion)和not PasswordTooSimple=true和true=true
,因此
CanContinue
将是
true
。例如,您可能启用了
btnContinue.Enabled:=CanContinue


顺便说一下,现在您知道编译器所说的“运算符不适用于此操作数类型”是什么意思了。事实上,错误信息非常准确:
not
运算符不适用于字符串操作数。

恐怕您完全误解了逻辑运算符
not
的含义。它们不用于字符串,而是用于布尔值(逻辑值,可以是
true
false

not
是一个一元运算符,如果操作数为
false
,则返回
true
;如果操作数为
true
,则返回
false
。因此,
not-true
产生
false
not-false
产生
true

例如,如果您有一个布尔变量
PasswordTooSimple
(键入的密码太简单),您可能希望在逻辑中的某个位置设置
CanContinue:=not PasswordTooSimple

是布尔型上的二进制运算符,当且仅当其两个操作数均为
true
时,该运算符返回
true
。例如,
CanContinue:=ValidUser和not PasswordTooSimple

是布尔值上的二进制运算符,返回
truefunction DecodeEmailAddressOK(
  const Address: string;
  out Initial: string;
  out Surname: string;
  out Year: Integer
): Boolean;
var
  AtPos: Integer;
begin
  AtPos := Pos('@', Address);
  if AtPos < 5 then
    Exit(False);
  Initial := Copy(Address, 1, 1);
  Surname := Copy(Address, 2, AtPos-3);
  Result := TryStrToInt(Copy(Address, AtPos-2, 2), Year);
end;