Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.04.2012, 11:25   #1
Ленка ленка
 
Регистрация: 23.04.2012
Сообщений: 2
Восклицание Строки. Преобразовать строку: оставить слова, содержащие буквы и цифры, остальные удалить

Строки. Напечатать все слова, которые совпадают с ее первым словом.
Преобразовать строку таким образом, чтобы в ней остались только слова, содержащие буквы и цифры, остальные слова удалить.
Ленка ленка вне форума Ответить с цитированием
Старый 23.04.2012, 11:51   #2
denisbrain
Форумчанин
 
Регистрация: 29.05.2011
Сообщений: 449
По умолчанию

Цитата:
Сообщение от Ленка ленка Посмотреть сообщение
Строки. Напечатать все слова, которые совпадают с ее первым словом.
Преобразовать строку таким образом, чтобы в ней остались только слова, содержащие буквы и цифры, остальные слова удалить.
Код:
{Строки. Напечатать все слова, которые совпадают с ее первым словом.
Преобразовать строку таким образом, чтобы в ней остались только слова, содержащие буквы и цифры, остальные слова удалить.}
uses crt;
const
WordDelimiters : set of char=[' ',',','.'];

type
Tpoint=record
  x,y:integer;
end;

TwordPosition=record
   Word:string;
   PosX:integer;
   WordLength:integer;
end;


Tdocument=record
   WordList:array [0..255] of TwordPosition;
   WordListCount:Integer;
end;
var d:Tdocument;
Procedure CreateDocument(var Value:Tdocument; BodyText:string;Len:integer);
var x:Integer;
    s2:string;
    rs:Tpoint;
    s:string;
begin
   s:=bodytext;
   Value.WordListCount:=0;
   rs.X:=1;
   rs.y:=0;
   for X:=1 to length(s) do begin
      if (ord(s[x])<33) or (s[x] in WordDelimiters) or (x=length(s)) then
                       begin
                       if not ((s[x] in WordDelimiters) or (ord(s[x])<33)) then s2:=s2+s[x];
                       if (s2<>'') and ((len=0) or (length(s2)>=len))  then begin
                             rs.y:=x-rs.X;

                               Value.WordListCount:=Value.WordListCount+1;
                               value.WordList[Value.WordListCount-1].Word:=s2;
                               value.WordList[Value.WordListCount-1].PosX:=rs.x;
                               value.WordList[Value.WordListCount-1].WordLength:=length(s2);
                             end;
                             s2:='';
                          end
                          else begin
                          if s2='' then rs.X:=x;
                          s2:=s2+s[x];
                          end;

  end;
end;

Function iSSimovl(SText:string;SimvolList:string):integer;
var y,X:integer;
begin
result:=0;
   for X:=1 to length(SimvolList) do
   for y:=1 to length(SText) do
    if SText[y]=SimvolList[x] then begin
                                     result:=x;
                                     exit;
                                   end;
    end;

var s:string;
    x:integer;
begin
clrscr;
   s:='Строки. Напечатать все слова, которые совпадают с ее первым словом.'+
'Преобразовать строку таким образом1, чтобы2 в ней остались только слова, содержащие буквы и цифры, остальные слова удалить.';
   writeln('Исходая строка');
   Writeln(s);
   writeln('----------------------------');
   Writeln('1. Напечатать все слова, которые совпадают с ее первым словом');
   d.WordListCount:=0;
   CreateDocument(d,s,0); // создаем массив слов
   writeln('----------------------------');
   for X:=1 to d.WordListCount-1 do begin
      if d.WordList[x].Word=d.WordList[0].Word then
      Writeln(d.WordList[x].Word);
   end;
   writeln('----------------------------');
   Writeln('2.Преобразовать строку таким образом, чтобы в ней остались только слова, содержащие буквы и цифры, остальные слова удалить.');
   writeln('----------------------------');
   for X:=d.WordListCount downto 0 do begin
      if iSSimovl(d.WordList[x].Word,'0123456789')>-1 then
      else delete(s,d.WordList[x].posx,d.WordList[x].WordLength+1);
   end;

   while pos('  ',s)>0 do   delete(s,pos('  ',s),1); // удалим пробелы
   Writeln('2получена строка "'+s+'"');

end.
задания на pascal/delphi ICQ 368254335
Tel +79177425326 mail denis-naymov1985(at)mail.ru login skype denis.new.skype
denisbrain вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Преобразовать строку таким образом, чтобы цифры каждого слова были перенесены в начало слова, изменив порядок следования цифр в с Нортон Общие вопросы C/C++ 0 11.02.2012 18:38
Вывести на консоль слова не содержащие цифры Luchia Помощь студентам 0 20.12.2011 13:30
Как удалить все буквы их ячеек и оставить № телефонов. Ppaa Microsoft Office Excel 14 05.07.2011 13:49
Преобразовать строку таким образом, чтобы буквы каждого слова в ней были отсортированы по возрастанию. Matr1x Общие вопросы C/C++ 4 07.01.2010 21:38