Выделить числа из строки. - 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.
Объяснение кода листинга программы
- Создается тип
TCharSet
, который представляет собой множество символов. - Создается константа
Delim_Set
, которая содержит все ограничители слов в строке. - Определяется функция
GetNextWord
, которая принимает строкуSrc
, переменнуюStartPos
(начало текущего слова) и константуDelimiters
(множество ограничителей слов). Функция возвращает следующее слово из строки. - В функции
GetNextWord
используется циклwhile
, который продолжается до тех пор, пока текущая позицияi
в строкеSrc
не превышает длину строкиLength(Src)
. - Внутри цикла
while
проверяется, является ли текущий символSrc[i]
ограничителем слов. Если да, то увеличиваетсяi
и цикл продолжается. Если нет, то цикл завершается и переходит к следующему слову. - После завершения цикла
while
функцияGetNextWord
возвращает полученное слово. - В основной части программы создается переменная
s
и присваивается ей строка'12 345 6789 121212 32132 1'
. - Переменная
StartPos
устанавливается равной 1. - Запускается цикл
repeat
, который повторяется до тех пор, покаStartPos
больше длины строкиs
. - Внутри цикла
repeat
вызывается функцияGetNextWord
с аргументамиs
,StartPos
иDelim_Set
. Результат выводится на экран. - После завершения цикла
repeat
переменнаяStartPos
сбрасывается в значение 1.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д