Pascal编码错误?

时间:2015-09-18 16:22:51

标签: delphi pascal

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

  

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

我不知道这意味着什么以及它为什么会出现。我只想从格式为

的电子邮件中获取姓氏
isurnameyy@kjh.com

我是第一个初始,yy是加入公司的一年。我知道我不能只使用midstr所以我正在尝试使用NOT命令来消除剩余的电子邮件以留下姓氏。

以下是代码:

uses
  System.SysUtils,
  strutils;

var email: string;

begin
writeln('input your email');
readln(email);
writeln('Your last name is ', (NOT leftstr(email,2)) AND (NOT rightstr(email,10)));
readln;
end.

2 个答案:

答案 0 :(得分:2)

andornot运算符不适用于字符串。您的代码远非您所需。

但我在这里最大的批评是将字符串处理与输出代码混合在一起。我写了一个纯字符串处理帮助器。

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;

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

答案 1 :(得分:1)

抱歉,但我承认我不能对你的代码做出正面或反面。你肯定走错了路。

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

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

function ExtractNameFromEmail(aEmail: string): string;
var
  PositionOfAtSymbol: Integer;
begin
  if not aEmail.Contains('@') then
  begin
    WriteLn('I don''t think you passed an email address');
    Exit;
  end;

  PositionOfAtSymbol := Pos('@', aEmail);
  Result := Copy(aEmail, 1, PositionOfAtSymbol - 1);
end;

这将为您提供您所寻找的内容。这需要一些计算(注意最后一行中需要“ - 1”)但这可以做你想要的。