Решить либо на С, С++, PascalДана строка, состоящая из слов, разделенных пробелами. Напишите программу, удаляющую лишние пробелы и добавляющую недостающие пробелы. Пробел считается лишним, если он: *стоит в начале строки; * стоит перед знаком препинания; * стоит в конце строки; * следует за пробелом. Добавить пробел после знака препинания, при условии выполнения предыдущих пунктов.
При работе со строками можно использовать много различных способов решения задачи. Здесь предлагается способ, в котором применяются только две библиотечных подпрограммы (length и delete). Можно было сделать и без delete, а можно использовать trim, например. Короче говоря, вот такой вариант программы на паскале:
var
s,s1:string;
mn:set of char;
i,l:integer;
begin
writeln(Введите строку:);
readln(s);
mn:=[.,,,;,:,!,?];
while s[1]= do delete(s,1,1);
while s[length(s)]= do delete(s,length(s),1);
while pos( ,s)>0 do delete(s,pos( ,s),1);
s1:=s[1];
for i:=2 to length(s)-1 do
if not((s[i]= )and(s[i+1] in mn)) then s1:=s1+s[i];
s1:=s1+s[length(s)];
s:=s1[1];
for i:=2 to length(s1)-1 do
if (s1[i] in mn)and(s1[i+1] ) then s:=s+s1[i]+ else s:=s+s1[i];
s:=s+s1[length(s1)];
writeln(s);
end.
Пример:
Введите строку:
Дана строка ,состоящая из слов , разделенных пробелами .
Дана строка, состоящая из слов, разделенных пробелами.
