Выделить числа из строки. - Pascal ABC

Узнай цену своей работы

Формулировка задачи:

Как сделать в данном случае проверку на совпадения S[k] с числом? Пробел служит чертой между данными в текстовом документе, там все вида: 123 321 432 432 234 ... моя задача, написать программу перезаписывающую все в вид: 123 321 432 .... Я хотел проверять совпадение S[k] с числом, тогда все остальные символы служили бы ограничителями. И при их начличии все переносилось бы на след строку. Не хочет сравнивать S[k] с числами. Вот код: P.S.если не сложно, укажите на всю глупость моего написания и ошибки.

Решение задачи: «Выделить числа из строки.»

textual
Листинг программы
program test;
 
type
  {тип для набора ограничителей слов в строке}
  TCharSet = set of char;
const
  {Список всех ограничителей слов в строке}
  Delim_Set: TCharSet = [' ', '.', ',', '!', '?', '-', ':', ';',
    '(', ')', '[', ']', '{', '}'];
 
{Нахождение слова из строки Src.
 Поиск слова начинается с позиции StartPos.
 На выходе не только очередное слово, но и переменная StartPos
 указывает на следующий за словом символ.
 Если слово не найдено, то StartPos=Length(Src)+1.}
  function GetNextWord(const Src: string; var StartPos: integer;
    const Delimiters: TCharSet): string;
  var
    i: integer;
  begin
    i := StartPos;
    {i-текущая позиция в анализируемой строке}
    {ищем первую букву слова}
    while (i <= Length(Src)) do
      if (Src[i] in Delimiters) then
        Inc(i)
      else
        Break;
    StartPos := i;
    {StartPos указывает на первую букву в слове или на "следующий за последним символом в строке"=Length(Src)+1}
    {теперь просматриваем слово пока не закончится строка или
     не начнутся ограничители слов}
    while (i <= Length(Src)) do
      if not (Src[i] in Delimiters) then
        Inc(i)
      else
        Break;
    {i - указывает на следующий за словом индекс (т.е. на очередной пробел)}
 
    GetNextWord := Copy(Src, StartPos, i - StartPos);
 
    StartPos := i;{для дальнейшего использования}
  end;
 
var
  s: string;
  StartPos: integer;
begin
  s := '12 345 6789 121212 32132 1';
  StartPos := 1;
  repeat
    writeln(GetNextWord(s, StartPos, Delim_Set));
  until StartPos > length(s);
end.

Объяснение кода листинга программы

  1. Создается тип TCharSet, который представляет собой множество символов.
  2. Создается константа Delim_Set, которая содержит все ограничители слов в строке.
  3. Определяется функция GetNextWord, которая принимает строку Src, переменную StartPos (начало текущего слова) и константу Delimiters (множество ограничителей слов). Функция возвращает следующее слово из строки.
  4. В функции GetNextWord используется цикл while, который продолжается до тех пор, пока текущая позиция i в строке Src не превышает длину строки Length(Src).
  5. Внутри цикла while проверяется, является ли текущий символ Src[i] ограничителем слов. Если да, то увеличивается i и цикл продолжается. Если нет, то цикл завершается и переходит к следующему слову.
  6. После завершения цикла while функция GetNextWord возвращает полученное слово.
  7. В основной части программы создается переменная s и присваивается ей строка '12 345 6789 121212 32132 1'.
  8. Переменная StartPos устанавливается равной 1.
  9. Запускается цикл repeat, который повторяется до тех пор, пока StartPos больше длины строки s.
  10. Внутри цикла repeat вызывается функция GetNextWord с аргументами s, StartPos и Delim_Set. Результат выводится на экран.
  11. После завершения цикла repeat переменная StartPos сбрасывается в значение 1.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 4.071 из 5
Похожие ответы