Написать программу поиска букв и цифр в строке, и выделения их в отдельный массив- Pascal(Паскаль)

uses CRT;
var
  words_count,
  nums_count, i : integer;
  words : array[1..100] of String;
  nums  : array[1..100] of Integer;
  str   : string;
 
procedure ParseIt(s : String);
var w : String;
    i, c, err : integer;
begin
  i := 1;
  while i<=length(s) do
  begin
    { пропускаем пробелы }
    while ((s[i]=' ') or (s[i]=',')) and (i<=length(s)) do inc(i);
    { считываем очередное слово }
    w := '';
    while (s[i]<>' ') and (s[i]<>',') and (i<=length(s)) do
    begin
      w := w + s[i];
      inc(i);
    end;
 
    if w='' then Continue;
 
    { тут решаем в какой из массивов
      добавить напарсиную строку }
    val(w, c, err);
 
    if err>0 then
    begin
      { строка }
      Inc(words_count);
      words[words_count] := w;
    end
    else
    begin
      { число }
      Inc(nums_count);
      nums[nums_count] := c;
    end;
  end;
end;
 
begin
  ClrScr;
  words_count := 0;
  nums_count  := 0;
 
  WriteLn('Введите строку и нажмите <Enter> :');
  ReadLn(str);
 
  { парсим входную строку }
   ParseIt(str);
 
  { выводим резалтс
    фор стрингс}
  WriteLn;
  WriteLn('Массив слов:');
  if words_count>0 then
    for i:=1 to words_count do Write(words[i],' ')
  else
    WriteLn('Нет элементов.');
  { фор нумбэрс }
  WriteLn;
  WriteLn('Массив чисел:');
  if nums_count>0 then
    for i:=1 to nums_count  do Write(nums[i],' ')
  else
    WriteLn('Нет элементов.');
  { get out! }
  WriteLn;
  ReadLn;
end.
Const
 S: string = 'qwerty, super; 23, sp! go? 567,ns';
var
 A: array[1..255] of string;
 B: array[1..255] of integer;
 T: string;
 N, An, Bn: byte;
Begin
 Writeln('Строка: ',S);
 An:=0;
 Bn:=0;
 S:=S+' ';
 While S<>'' do
  Begin
   T:=S[1];
   Delete(S,1,1);
   While ((T[Length(T)] in ['a'..'z','A'..'Z','0'..'9'])) do
    Begin
     T:=T+S[1];
     Delete(S,1,1);
    End;
   Delete(T,Length(T),1);
   If T<>'' then
   Begin
    N:=0;
    While (N)<=Length(T) do
     If not (T[N+1] in ['0'..'9']) then Break else Inc(N);
    If N=Length(T) then Inc(Bn) else Inc(An);
    If N=Length(T) then val(T,B[Bn],N) else A[An]:=T;
   End;
  End;
 For N:=1 to An do
  Write(A[N],' ');
 Writeln('- Ваш массив строк');
 For N:=1 to Bn do
  Write(B[N],' ');
 Writeln('- Ваш массив чисел');
End.
uses crt;
const rzd=['.',',',';',':','?','!'];
type str=string[50];{ограничим размер слов} 
slv=array[1..100] of str;{массив слов} 
chs=array[1..100] of integer;{массив чисел} 
var s:string;
    mchs:chs;
    mslv:slv;
    i,ks,kc:byte;{счетчики}     
t,c:integer;{переменные для перевода строки в число} procedure Vvod;
var i:byte;
begin 
writeln('Строка:');
readln(s);
for i:=1 to length(s) do 
if s[i] in rzd then s[i]:=' ';{меняем разделители на пробелы} 
s:=s+' ';{добавим пробел в конец} 
while pos('  ',s)>0 do 
delete(s,pos('  ',s),1);{удалим лишние пробелы, в апострофах по 2 пробела, обязательно} end;
{получим строку вида слово пробел слово пробел} procedure Massiv;
var ks,kc:byte;
    t,c:integer;
    s1:str;
begin ks:=0;kc:=0;
while pos(' ',s)>0 do{пока в строке есть пробел}  
begin   
s1:=copy(s,1,pos(' ',s)-1);{копируем первое слово}   
val(s1,t,c);{пытаемся преобразовать в число}   
if c=0 then{если код=0, то число}    
  begin     
   kc:=kc+1;{считаем}     
   mchs[kc]:=t;{в массив чисел}    
  end   
else{если код не равен 0, не число}
  begin
   ks:=ks+1;
   mslv[ks]:=s1;{в массив слов}    
  end;
 delete(s,1,pos(' ',s));{удаляем просмотренное слово}  
end;
writeln('Массив чисел:');
for i:=1 to kc do write(mchs[i],' ');
writeln;
writeln('Массив слов:');
for i:=1 to ks do write(mslv[i],' ');
readln 
end;
 
begin 
clrscr; 
Vvod; 
Massiv; 
end.

Leave a Comment

+ 20 = 23