Выделить числа из строки. - 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.