Как можно проверить, были ли введены последовательные буквы с клавиатуры qwerty в консольном приложении delphi?

По сути, у меня есть ввод, и я хочу проверить, использовал ли пользовательский ввод 3 или более последовательных букв из раскладки клавиатуры qwerty. Под этим я подразумеваю QWE или YUIOP. Сначала я сохранил пользовательский ввод в строковой переменной и использовал функцию ansiLowerCase для преобразования ввода в нижний регистр. Я возился с объявлением разметки qwerty как постоянной строки и использовал функцию strscan, но безрезультатно. Любая помощь будет принята с благодарностью, спасибо.

1 ответ

Решение

Попробуйте что-то вроде этого:

function HasThreeConsecutiveLetters(const Str: string): Boolean;
const
  QwertyLetters: array[0..2] of string = (
    'QWERTYUIOP',
    'ASDFGHJKL',
    'ZXCVBNM'
  );
var
  I, J, K: Integer;
  S: String;
begin
  Result := False;
  S := AnsiUpperCase(Str);
  for I := 1 to Length(S) do
  begin
    for J := Low(QwertyLetters) to High(QwertyLetters) do
    begin
      K := Pos(S[I], QwertyLetters[J]);
      if (K <> 0) and
         ((K+2) <= Length(QwertyLetters[J])) and
         (Copy(S, I, 3) = Copy(QwertyLetters[J], K, 3)) then
      begin
        Result := True;
        Exit;
      end;
    end;
  end;
end;

Тогда вы можете сделать это:

var
  input: string;
begin
  input := ...;
  if HasThreeConsecutiveLetters(input) then
    ...
  else
    ...
end;
Другие вопросы по тегам