Предмет: Информатика,
автор: lukinykhv
Помогите,пожалуйста.
Дана строка не более 50 символов. Переписать в обратном порядке все слова, начинающиеся с заданной буквы. Определить количество предложений в строке.
Написать программу в паскале
Аноним:
1) Как определить конец предложения, чтобы их разделять? 2) Что должно быть выведено - только "перевернутые" слова или вся строка, с этим словами, "перевернутыми", но оставшимися на своих местах?
Ответы
Автор ответа:
0
// PascalABC.NET
// Версия 3.3.5 сборка 1662 (29.04.2018)
begin
var b := ReadlnString('Введите строку -').ToLower+' ';
var (z,r) := (',!?.:;'.ToCharArray,'!.?;'.ToCharArray);
var tt:=true; Range(1,b.Length+b.ToCharArray.Where(t->t in z).Count).ForEach(t->if (b[t] in z) and tt then begin Insert(' ', b, t); tt:=false end else tt:=true);
var a := b.ToWords;
var x := ReadlnChar('Буква -');
var (w, i) := a.Select((w, i)-> (w, i)).Where(t -> t[0].ToString.First.ToLower = x).Reverse.UnZipTuple;
i := i.Reverse;
foreach var t in w.Zip(i, (p, q)-> (p, q)) do a[t[1]] := t[0];
b := string.Join(' ', a);
tt:=true; Range(1,b.Length-b.ToCharArray.Where(t->t in z).Count+1).ForEach(t->if (b[t] in z) and tt then begin Delete(b, t - 1, 1); tt:=false end else tt:=true);
b.Println; Println('Количество предложений:',b.ToWords(r).Count);
end.
Пример в приложении.
// Версия 3.3.5 сборка 1662 (29.04.2018)
begin
var b := ReadlnString('Введите строку -').ToLower+' ';
var (z,r) := (',!?.:;'.ToCharArray,'!.?;'.ToCharArray);
var tt:=true; Range(1,b.Length+b.ToCharArray.Where(t->t in z).Count).ForEach(t->if (b[t] in z) and tt then begin Insert(' ', b, t); tt:=false end else tt:=true);
var a := b.ToWords;
var x := ReadlnChar('Буква -');
var (w, i) := a.Select((w, i)-> (w, i)).Where(t -> t[0].ToString.First.ToLower = x).Reverse.UnZipTuple;
i := i.Reverse;
foreach var t in w.Zip(i, (p, q)-> (p, q)) do a[t[1]] := t[0];
b := string.Join(' ', a);
tt:=true; Range(1,b.Length-b.ToCharArray.Where(t->t in z).Count+1).ForEach(t->if (b[t] in z) and tt then begin Delete(b, t - 1, 1); tt:=false end else tt:=true);
b.Println; Println('Количество предложений:',b.ToWords(r).Count);
end.
Пример в приложении.
Приложения:
Автор ответа:
0
PascalABC.NET 3.4.0, сборка 1675 от 12.06.2018
Внимание! Если программа не работает, обновите версию!
begin
var adelim:=' .,;:!?-'.ToCharArray;
var s:=ReadlnString;
Writeln(25*'- ');
var c:=ReadlnChar('Буква для поиска слов:'); Writeln(25*'- ');
var ww:=s.ToWords(adelim).Where(w->w.First=c);
foreach var w in ww do begin
var i:=Pos(w,s);
Delete(s,i,w.Length); Insert(w.Inverse,s,i)
end;
s.Println; Writeln(25*'- ');
Writeln('Предложений всего: ',s.ToWords('.').Count)
end.
Внимание! Если программа не работает, обновите версию!
begin
var adelim:=' .,;:!?-'.ToCharArray;
var s:=ReadlnString;
Writeln(25*'- ');
var c:=ReadlnChar('Буква для поиска слов:'); Writeln(25*'- ');
var ww:=s.ToWords(adelim).Where(w->w.First=c);
foreach var w in ww do begin
var i:=Pos(w,s);
Delete(s,i,w.Length); Insert(w.Inverse,s,i)
end;
s.Println; Writeln(25*'- ');
Writeln('Предложений всего: ',s.ToWords('.').Count)
end.
Приложения:
Похожие вопросы
Предмет: Английский язык,
автор: umbrella66
Предмет: Математика,
автор: bagdanhmelev
Предмет: Литература,
автор: uropwqe
Предмет: Математика,
автор: Mkasd
Предмет: Математика,
автор: lenya2004