Заменить пробел и группы пробелов символом "*"

Задача: 

Дана строка слов, разделенных пробелами. Между словами может быть несколько пробелов, в начале и конце строки также могут быть пробелы. Требуется преобразовать строку так, чтобы в ее начале и конце пробелов не было, а слова были разделены одиночным символом "*" (звездочка).

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

Чтобы избавиться от пробелов в начале строки, надо удалять по одному первому символу до тех пор, пока первым не окажется непробельный символ. Счетчик при этом не надо увеличивать, т.к. исследуемым всегда будет первый символ.

Чтобы избавиться от пробелов в конце строки, надо удалять по одному последнему символу, пока последним не окажется непробельный символ. Поскольку при удалении символа длина строки уменьшается, то при использовании счетчика его надо уменьшать на 1. Хотя можно обойтись без него, если на каждой итерации цикла измерять длину строки.

Алгоритм замены пробелов на звездочки с учетом, что подряд идущих пробелов может быть несколько, а "*" должна быть одна:

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

var
    s: string;
    i: byte;
begin
    readln(s);
 
    i := 1; // избавляемся от пробелов спереди
    while s[i] = ' ' do delete(s,i,1);
    i := length(s); // избавляемся от пробелов сзади
    while s[i] = ' ' do begin delete(s,i,1); i := i - 1 end;
 
    i := 1; // замена пробелов звездочками
    while i <= length(s) do begin
		if s[i] = ' ' then
			if s[i-1] = '*' then begin
				delete(s,i,1);
				i := i - 1;
			end
			else begin
				delete(s,i,1);
				insert('*',s,i);
			end;
		i := i + 1;
    end;
 
    writeln(s);
end.

Пример работы программы:

     one   tho three four        five   six seven    
one*tho*three*four*five*six*seven

Комментарии

Помогите пожалуйста решить

Составить программу, которая заменяет в заданном тексте сочетания букв «abc» на «klm»

1

var
  s: string;
  i: integer;
 
begin
  readln(s);
  for i := 1 to length(s) - 2 do
  begin
    if (s[i] = 'a') and (s[i + 1] = 'b') and (s[i + 2] = 'c') then 
    begin
      s[i] := 'k';
      s[i + 1] := 'l';
      s[i + 2] := 'm';
    end;
  end;
  writeln(s);
end.

Помогите с задачей!

В файле 1.PAS дана строка символов, в которой встречается символ ‘:’. Записать в файл 2.PAS строку, полученную из исходной по следующему правилу: до первого символа ‘:’ заменить все вхождения символа ‘1’ символом ‘0’, после символа ‘:’ удалить все символы ‘8’.

Формулировка задачи

Формулировка задачи расплывчатая. Сколько символов двоеточия в файле? один или несколько? Если несколько, то после которого удалять восьмерки? после последнего двоеточия или первого?

В файле 1.PAS дана строка

В файле 1.PAS дана строка символов, в которой встречается символ ":"(за ранее колличество ":" не известно). Записать в файл 2.PAS строку, полученную из исходной по следующему правилу: до первого символа ":" заменить все вхождения символа "1" символом "0", после символа ":" удалить все символы "8".

Вы пишете: после символа ":"

Вы пишете:
после символа ":" удалить все символы "8".

Вопрос:
после какого символа ":" удалить все символы "8"? После первого? То есть остальными символами двоеточия пренебречь. Или после последнего символа двоеточия? Тогда задача решается немного по-другому, так как последний еще надо найти.

После 1-го ":"

После 1-го ":"

тогда решение проще, оно ниже

тогда решение проще, оно ниже

var f1, f2: file of

var
    f1, f2: file of char;
    c: char;
 
begin
    assign(f1, '1.txt');
    reset(f1);
    assign(f2, '2.txt');
    rewrite(f2);
    while not eof(f1) do begin
        read(f1, c);
        if c = '1' then c := '0';
        write(f2,c);
        if c = ':' then break;
    end;
    while not eof(f1) do begin
        read(f1, c);
        if c = '8' then continue;
        write(f2,c);
    end;
    close(f1);
    close(f2);
end.

Приме входного файла 1.txt:

aj1jf8134l023:d82310s8skfj3:348492kjh9j,8b

Результат в 2.txt:

aj0jf8034l023:d2310sskfj3:34492kjh9j,b

Огромное вам Спасибо!!!

Огромное вам Спасибо!!!

Заменить пробелы и группы пробелов символом * (можно и так)

program stroki;
           uses crt;
           var i:integer;
               s: string;
     begin
      clrscr;
      writeln('Введите строку: ');
      readln(s);    // считываем строку
      for i:=1 to length(s) do
          delete(s,pos('  ',s),1); //удаляем лишние пробелы внутри
      if s[1]=' ' then delete(s,1,1);     //удаляем пробел спереди
      if s[length(s)]= ' ' then delete(s,length(s),1);   //удаляем пробел в конце      
for i:=0 to length(s)-1 do
      if s[i]=' ' then s[i]:='*';   //меняем пробелы на *
      writeln;
      writeln(s);  //выводим результат
      readln;
     end.