Pascal. Задача 5-3

Удалить из введенной пользователем строки все пробелы.

Решение

Вариант 1. Посимвольное копирование из исходной строки в результирующую.


var
  i: integer;
  ins, outs: string;
begin
  write('Введите строку: ');
  read(ins);
  outs := '';
  for i := 1 to Length(ins) do
    if ins[i] <> ' ' then
      outs := outs + ins[i];
  writeln(outs);
end.

Вариант 2. Более эффективный алгоритм с использованием функций поиска символа в строке и копирования подстроки. Ищем в исходной строке слово (т.е. непрерывную последовательность символов, отличных от пробела) и копируем в результирующую строку найденное слово функцией Copy.


var
  ins, outs : string;
  pos1, pos2, currentindex : integer;
begin
  write('Введите строку: ');
  read(ins);
  currentindex := 1;
  outs := '';
  while currentindex <= Length(ins) do begin
      pos1 := currentindex;  // Начинаем искать первый символ не равный пробелу
      while (ins[pos1] = ' ') AND (pos1 < Length(ins)) do
        Inc(pos1);
      if ins[pos1] = ' ' then break; // Если оставшиеся символы пробелы, то прекращаем
      pos2 := Pos(' ', ins, pos1 + 1); // Ищем пробел после первого символа, не равного пробелу 
      if pos2 > 0 then
        // Копируем слово в результат
        outs := outs + Copy(ins, pos1, pos2 - pos1) 
      else begin
        // Копируем оставшуюся часть исходной строки в результат
        outs := outs + Copy(ins, pos1, Length(ins) - pos1 + 1);
        break;
        end;
      currentindex := pos2;
    end;
  writeln(outs);
end.