我把这段代码放到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.
答案 0 :(得分:2)
and
,or
和not
运算符不适用于字符串。您的代码远非您所需。
但我在这里最大的批评是将字符串处理与输出代码混合在一起。我写了一个纯字符串处理帮助器。
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”)但这可以做你想要的。