Решить либо на С, С++, PascalДана строка, состоящая из слов, разделенных пробелами. Напишите программу, удаляющую лишние пробелы и добавляющую недостающие пробелы. Пробел считается лишним, если он: *стоит в начале строки; * сто...

Решить либо на С, С++, 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. Пример: Введите строку:    Дана строка   ,состоящая из слов  ,    разделенных пробелами   .    Дана строка, состоящая из слов, разделенных пробелами.
Гость
//Pascal ABC.NET v3.1 сборка 1172 Var  s,sr:string;  i,j,n:integer;  pr:array of char=('.',',',';',':','!','?'); begin  readln(s); s:=s.Trim; var ars:=s.ToWords(); s:=''; for i:=0 to ars.Length-1 do s+=ars[i]+' '; s:=s.Trim; i:=0; while i<>s.Length do begin inc(i); if (s[i] in pr) and (s[i-1]=' ') then delete(s,i-1,1); end; i:=0; while i<>s.Length-1 do begin inc(i); if (s[i] in pr) and (s[i+1]<>' ') then insert(' ',s,i+1); end; s:=s.Trim; writeln(s); end. Пример ввода: Очень, очень ,очень , очень ,очень,очень много слов. Пример вывода: Очень, очень, очень, очень, очень, очень много слов.
Не нашли ответ?
Ответить на вопрос
Похожие вопросы