Удаление из строки слов заданной длины

Задача

Удалить из строки все слова, длина которых меньше пяти символов. В строке не используются знаки препинания.

Решение

 

Алгоритм решения задачи: 

  1. Просматривать строку посимвольно (i), пока не будет достигнут ее конец (len).
  2. Длина очередного слова хранится в переменной (j). Если очередной символ является пробелом, то переменная сравнивается с числом 5.
  3. Если длина слова оказывается меньше пяти символов, то с помощью процедуры delete() оно удаляется.
  4. Переменная, обозначающая длину слова, должна обнуляться, когда очередной символ пробел.
  5. После удаления подстроки должна снова измеряться длина строки (len).

Программа на языке Паскаль: 

 

var
    s: string;
    len, i, j: integer;
begin
    write('Input string: ');
    readln(s);
    len:= length(s);
 
    i:= 1; {начинаем с первого символа в строке}
    j:= 0; {сначала длина слова равна нулю}
    while i<=len do begin
        if s[i] <> ' ' then begin  {если очередной символ не пробел}
            j:= j+1; {увеличиваем длину слова}
            i:= i+1; {переходим к следующей букве}
        end
        else begin {если очередной символ пробел}
            if j < 5 then begin  {если длина слова < 5}
                delete(s,i-j,j+1); {вырезаем вместе с пробелом после слова}
                len:= length(s);
                i:= i-j; {i в начало на длину вырезанной подстроки}
                j:= 0; {обнуляем длину слова}
            end
            else begin {если длина слова > 5}
                i:= i+1; {переходим к следующей букве}
                j:= 0; {обнуляем длину слова}
            end;
        end;
    end;
 
    if j < 5 then {если последнее слово < 5 букв}
        delete(s,i-j,j);
 
    writeln(s);
 
readln
end.

 

Тема

Строки

Уровень

Сложные задачи

Теги

Комментарии

program program1;
uses crt;
var
        s: string;
        i, j: byte;
begin
        clrscr;
        write ('Введите строку: ');
        readln (s);
        s[(length (s)) + 1]:=' ';
        for i:=1 to length(s) + 1 do
                if s[i] <> ' ' then inc(j) else
                        if j < 5 then
                                begin
                                        delete (s, i - j, j + 1);
                                        j:=0;
                                end
                        else j:=0;
        writeln (s);
        readkey;
end.

Var
  Str: String;
  StrArr: Array Of String;
  i: Integer;
Begin
 WriteLn('Введите строку:'); ReadLn(Str); StrArr:=Str.Split(' ');Str:='';
  For i:=0 To Length(StrArr)-1; Do
    Begin
      If(Length(StrArr[i])>=5) Then
        Begin
          Str:=Str+StrArr[i]+' ';
        End;
    End;
  If(Str[Length(Str)]=' ') Then Delete(Str,Length(Str),1);
    WriteLn(Str);
End.

Добавить комментарий