Постройте блок-схему алгоритма обработки строк: вводится строка, состоящая из букв и пробелов. составить из входящих в нее букв несколько любых их сочетаний (слов) любой длины. каждую букву строки можно использовать неограниченное количество раз.
PascalABC.NET 3.3.5, сборка 1660 от 20.04.2018 Внимание! Если программа не работает, обновите версию!
procedure Preobraz(var Stroka:string); begin var bq:=new Queue<(integer,integer)>; foreach var m in Stroka.Matches('\s+') do bq.Enqueue((m.Index,m.Length)); var wq:=new Queue<(integer,string)>; foreach var m in Stroka.Matches('\S+') do if m.Value.Any(t->t in ['0'..'9']) then wq.Enqueue((m.Index,'')) else wq.Enqueue((m.Index,m.Value)); Stroka:=''; var pbi,pwi:integer; while (bq.Count>0) and (wq.Count>0) do begin (pbi,pwi):=(bq.Peek[0],wq.Peek[0]); if pbi<pwi then begin Stroka:=Stroka+bq.Peek[1]*' '; bq.Dequeue end else begin Stroka:=Stroka+wq.Peek[1]; wq.Dequeue end end; while bq.Count>0 do begin Stroka:=Stroka+bq.Peek[1]*' '; bq.Dequeue end; while wq.Count>0 do begin Stroka:=Stroka+wq.Peek[1]; wq.Dequeue end end;
begin var s:=ReadlnString; Preobraz(s); s:='<'+s+'>'; // чтобы было видно, как работает s.Println end.
Не такое оно и сложное. Главная проблема - то, что между словами может быть несколько пробелов. Устраним её, написав функцию, которая оставляла бы между словами по 1 пробелу:
function RemoveSpaces(str : string) : string; begin //Тут цикл for, переписанный через while var iter := 1; //Проходим по строке while (iter < str.Length) do begin //Если видим 2 пробела подряд, удаляем 1 и откатывает итератор. if (str[iter] = ' ') and (str[iter + 1] = ' ') then begin str := str.Remove(iter, 1); iter -= 1; end; iter += 1; end; RemoveSpaces := str; end;
Теперь мы можем получить кол-во слов очень просто:
function CalcWords(str : string) : integer; begin CalcWords := RemoveSpaces(str).Split(' ').Count(); end;
Т.е. мы делим строку на массив через пробелы, и считаем кол-во элементов массива.
полный код: https://pastebin.com/A63ggdWm
0,0(0 оценок)
Полный доступ
Позволит учиться лучше и быстрее. Неограниченный доступ к базе и ответам от экспертов и ai-bota
Оформи подписку