Форум » Обработка символьных строк » Михлин » Ответить

Михлин

Артур: 41) (Б.С. Михлин) В текстовом файле k7-m3.txt находится цепочка из прописных (заглавных) символов латинского алфавита A, B, C. Найдите все подцепочки, состоящие из символов C (C-подцепочки) длиной не более четырех. В ответе через пробел укажите: порядковый номер найденной подцепочки (начиная с единицы) при проходе по исходной цепочке слева направо, длину подцепочки и саму подцепочку, заменив в ней, начиная со второго символа «С», большие «С» на «с» строчные (маленькие). Гарантируется, что в исходной цепочке есть C-подцепочки. Подскажите пожалуйста, как запомнить подцепочку и ее порядковый номер? [pre2] var f:text; s:string; max,i,k: longint; x:char; begin assign (f,'C:\Users\Admin\Desktop\УКПАИ.txt'); reset(f); read(f,s); max:=0; k:=0; begin for i:=1 to length(s) do begin if s[ i]='C' then begin k:=k+1; if k> max then max:=k; if k>4 then break; end else k:=0; end; end; writeln (max); end.[/pre2]

Ответов - 2

Агаркова: Здравствуйте, в этом задании имею переменную С, которая считает длину текущей цепочки из символов С, переменная count введена для подсчета порядкового номера цепочки. Если встретили символ, отличный от С, то , если длина цепочки удовлетворяет, то увеличиваем этот счетчик и выводим счетчик, потом найденную длину цепочки, потом один заглавный символ С, а потом в цикле от 2 до длины цепочки выводим строчные символы. Иначе обнуляем счетчик С и начинаем заново первый цикл. Моя программа по этому заданию выглядит так. Может наворочено, но верно вроде работает. [pre2] var i, countC, C: longint; s: string; begin assign(input, 'k7-m3.txt'); readln(s); C := 0; countC:=0; if (s[1]='C') then C:=C+1; for i:=2 to length(s) do begin if s[ i]='C' then begin C := C+1;; if (i=length(s)) and (s[i-1]='C') and (C<=4) then begin write (countC+1, ' ', C, ' ', 'C'); for var j := 2 to C do write ('c');; writeln; end; end else begin if (C<=4)and (C>0) then begin countC := countC+1; write (countC, ' ', C, ' ', 'C'); for var j := 2 to C do write ('c');; writeln; end; c := 0; end; end; end.[/pre2]

Михлин: Здравствуйте, Артур! Я программирую на Python. Привожу программу на Python с комментариями. [pre2] s=open('K7-m3.txt').read() nc=0 # порядковый номер C-подцепочи длиной <= 4 count=0 # количество символов C в текущей C-подцепочке for ch in s: # перебираем все символы в s if ch=='C': count+=1 else: # символ отличный от 'C' if 0<count<=4: nc+=1 # посчитаем закончившуюся C-подцепочку c длиной <= 4 print(nc,count,'C'+'c'*(count-1)) count=0 # сброс для следующей C-подцепочки if 0<count<=4: # если строка s заканчивается C-подцепочкой c длиной <= 4, nc+=1 # то посчитаем ее print(nc,count,'C'+'c'*(count-1))[/pre2]



полная версия страницы