Так как это домашнее задание, я не дам вам именно то, о чем вы просите. Вместо этого я дам вам несколько более сложный пример для изучения.
Во-первых, мы должны решить, как выглядит допустимое имя. Потому что, если мы не знаем точно, какие имена следует считать действительными, мы, конечно же, не сможем запрограммировать компьютер, чтобы различать разницу!
В качестве игрушечного примера допустим, что имя действительно iff :
Он содержит только буквы, пробелы и символ ДЕФИС-МИНУС (-). [Обратите внимание, что все в строке является символом. Примерами классов символов являются буквы, цифры, пробелы и знаки препинания. Поэтому, когда вы говорите, что строка должна содержать только «символы», вы имеете в виду что-то другое, например «только буквы».]
Она содержит как минимум две буквы.
Этого явно недостаточно для реального приложения. Это не позволит использовать многие допустимые имена. Но для этого примера с игрушкой этого вполне достаточно.
Давайте реализуем это!
function IsValidName(const S: string): Boolean;
var
i, c: Integer;
begin
// The string must only contain letters, whitespace, and HYPHEN-MINUS
for i := 1 to S.Length do
if not (S[i].IsLetter or S[i].IsWhiteSpace or (S[i] = '-')) then
Exit(False);
// The string must contain at least two letters
c := 0;
for i := 1 to S.Length do
if S[i].IsLetter then
Inc(c);
if c < 2 then
Exit(False);
Result := True;
end;
Изучите эту функцию, пока полностью не поймете, как она работает!
Готово? Большой! Теперь давайте воспользуемся этим:
program Project1;
{$APPTYPE CONSOLE}
{$R *.res}
uses
System.SysUtils,
Character;
var
Name: string;
function IsValidName(const S: string): Boolean;
begin
// same as above, won't repeat it here
end;
begin
try
try
Writeln('Hello! What is your name?');
while True do
begin
Readln(Name);
Name := Name.Trim;
if IsValidName(Name) then
begin
Writeln('Welcome, ', Name, '!');
Break;
end
else
Writeln('Surely that isn''t your real name? What is your actual name?');
end;
except
on E: Exception do
Writeln(E.ClassName, ': ', E.Message);
end;
finally
Writeln('Program about to end. Press Return to exit.');
Readln;
end;
end.
Опять же, поскольку я почти нарушаю правила, делая за вас домашнее задание, я не буду подробно объяснять logi c. Вместо этого я дам вам понять, как это работает. Так вы узнаете гораздо больше.
Обновление: Полная программа должна выглядеть так:
program Project1;
{$APPTYPE CONSOLE}
{$R *.res}
uses
System.SysUtils,
Character;
var
Name: string;
function IsValidName(const S: string): Boolean;
var
i, c: Integer;
begin
// The string must only contain letters, whitespace, and HYPHEN-MINUS
for i := 1 to S.Length do
if not (S[i].IsLetter or S[i].IsWhiteSpace or (S[i] = '-')) then
Exit(False);
// The string must contain at least two letters
c := 0;
for i := 1 to S.Length do
if S[i].IsLetter then
Inc(c);
if c < 2 then
Exit(False);
Result := True;
end;
begin
try
try
Writeln('Hello! What is your name?');
while True do
begin
Readln(Name);
Name := Name.Trim;
if IsValidName(Name) then
begin
Writeln('Welcome, ', Name, '!');
Break;
end
else
Writeln('Surely that isn''t your real name? What is your actual name?');
end;
except
on E: Exception do
Writeln(E.ClassName, ': ', E.Message);
end;
finally
Writeln('Program about to end. Press Return to exit.');
Readln;
end;
end.