получить несколько входов вместо одного - PullRequest
0 голосов
/ 25 февраля 2020

Итак, я новичок здесь и я новичок в программировании в целом. Я сделал эту программу, которая мне была нужна для проекта (pascal программа, использующая Lazarus), которая позволяет мне получать вид списка, сгенерированного заменой * числами. Мне нужно дать ему возможность обрабатывать несколько кодов одновременно (максимум 10) вместо того, чтобы вводить каждый код сразу.

program b;

{$mode objfpc}
{$H+}

uses sysutils;

var
  sourcestr: string;
  resultstr: string;
  n: integer;

begin
  writeln('provide a string:');
  readln(sourcestr);
  for n := 0 to 99 do begin
    resultstr := StringReplace(sourcestr, '*', IntToStr(n div 10), []);
    resultstr := StringReplace(resultstr, '*', IntToStr(n mod 10), []);
    resultStr := resultStr + ':password';
    writeln(resultstr);
  end;
end.

Я надеюсь, что вы могли бы помочь мне с этим, и спасибо заранее.

1 Ответ

0 голосов
/ 25 февраля 2020

В приведенном ниже коде показано, как заменить произвольное количество пар звездочек на два генерируемых вами замещающих символа.

  for n := 0 to 9 do begin
    resultstr := sourcestr;
    while Pos('*', resultstr) > 0 do begin
      stringReplace(resultstr, '*', IntToStr(n div 10), []);
      resultstr := StringReplace(resultstr, '*', IntToStr(n mod 10), []);
    end;
    resultStr := resultStr + ':password';
    writeln(resultstr);
  end;

Используется функция Pos в while l * 1029. * заменить звездочкой пары. Помните, что вывод может быть не совсем тем, что вам нужно, потому что в каждом сгенерированном resultstr вы получите одинаковые замещающие символы, заменяющие каждую пару звездочек, т. Е. С вводом

a ** b ** c

сгенерированные resultstr будут иметь вид

a00b00 c
a11b11 c

что может быть не то, что вам нужно. Если нет, то, как они говорят, изменение кода для выполнения того, что вам нужно делать , остается для читателя как упражнение.

Кстати, позже мне пришло в голову, что, возможно, вы спрашиваете, как вводить и обрабатывать несколько строк пользовательского ввода. Один из способов сделать это - прочитать строки в TStringList (см. Интерактивную справку) и затем обработать это. Что-то вроде:

var
  TL : TStringList;
  sourcestr : String;

begin

  TL := TStringList.Create;
  repeat
    readln(sourcestr);
    if sourcestr <> '' then
      TL.Add(sourcestr);
  until sourcestr = '';

  for i := 0 to TL.Count - 1 do begin
    sourcestr := TL[i];
    // process sourcestr however you want
  end;

  TL.Free;

, хотя вы, конечно, могли бы просто обработать sourcestr, когда вы go вперед, в повторе ... до l oop.

...