Помощь - Поиск - Пользователи - Календарь
Полная версия: Работа со строками
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Relrin
Суть задачи следующая: Дана последовательность, содержащая от 2 до 30 слов, в каждом из которых от 2 до 10 латинских букв. Между соседними словами – не менее одного пробела, а за последним словом – точка. Напечатать все слова, отличные от последнего слова, преобразовав следующим образом: если слово нечетной длины, то удалить среднюю букву.

Пока не в недоумении как решить задачу... Вот найду я длину строки, как дальше поступать? Что нужно сделать, чтобы "вычленить" последнее слово и после сделать некоторые действия:
1) то, что осталось от строки, сделать преобразования
2) сравнивать новую строку с последним словом
3) как выкручиваться из случаев, когда общее количество символов превышает 255 без подключения каких-либо сторонних модулей?

Пока дошел до этого:

Var
  st:string;
  a,b: string;
  i,j,k: integer;

begin
  clrscr;
  {Введи последовательность слов}
  writeln('Write you words: ');
  readln(st);
  k:=1;
  {Работаем с исходной строкой, пока она больше 0}
  while length(st)>0 do
  begin
    {Ищем те случаи, когда строка оканчивается на пробел или точку}
    k:=pos(' ',st);
    if k=0 then k:=pos('.',st);
    {когда нашли - переносим}
    a:=copy(st,1,k-1);
    {удаляем слово из последовательности}
    delete(st,1,k);
    {Если количество букв в слове нечетное - исключаем среднюю букву}
    if length(a) mod 2<>0 then
    begin
      k:=(length(a)div 2)+1;
      delete(a,k,1);
    end;
  end;
  {Вывод результата}
  for i:=1 to length(a) do
  begin
    write(a[i]);
  end;
  readln;
end.

Relrin
Вот к такому виду уже пришел... Задачу я почти сделал... Только я хочу под массив сейчас переделать... Помогите пожалуйста!

Uses
  crt;

Var
  a: string;
  b,c:array [1..100] of string;
  i,j,k,n,m,pos,count: integer;

Begin
  clrscr;
  {Ввод последовательости слов}
  readln(a);
  i:=length(a)-1;
  k:=1;
  count:=0;
  {Переносим последнее слово в отдельный массив}
  while a[i]<>' ' do
  begin
    inc(count);
    b:=b[count]+a[i];
    k:=k+1;
    i:=pred(i);
  end;
  {Работаем со оставшейся строкой}
  while a[1]<>'.' do
  begin
    {До момента нахождения пробела с начала строки}
    while a[1]=' ' do
    delete(a,1,1);
    k:=1;
    {Как нашли - "вырезаем" это слово и переносим в массив для дальнейшей обработки}
    while (a[k]<>' ') and (a[k]<>'.') do
      k:=succ(k);
      c:=copy(a,1,k-1);
      delete(a,1,k-1);
      {Работа со словом}
      if c<>b then
      begin
        {Если количество букв нечетное - то удаляем среднюю букву}
        if length(c) mod 2<>0 then
        begin
          pos:=(length(c)div 2)+1;
          delete(c,pos,1);
        end;
      {Вывод слова}
      for i:=1 to length(c) do
      write(c[i]);write(' ');
      end;
  end;
  readln;
End.


мисс_граффити
Посмотри FAQ - там есть разбиение строки на слова.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.