Обработка строк по словам.ppt
- Количество слайдов: 18
Обработка строк по словам
КОРОТКИЕ СТРОКИ
Примеры решения задач (барьерный элемент) 1. Определите, сколько букв содержит самое длинное слово во введённой строке символов. На вход программе подаётся строка, состоящая не более чем из 254 символов. Слова разделяются одним или несколькими пробелами. Выведите искомое число. abcd ef Hello world! 4 6
S S: =S+’_’ dl_sl: =0 max: =0 i: =1 Задача решается проще, если в конце исходной строки приписать пробел (фактически добавить «барьерный» элемент). Тогда признаком окончания очередного слова всегда будет являться пробел. i≤ length(S) max да да S[i]<>’_’ dl_sl: =dl_sl+1 нет да max: =dl_sl: =0 i=i+1 dl_sl>max конец
Задача. Дана строка символов, длиной не более 254. Словом назовем совокупность любых символов, разделенных одним или несколькими пробелами и не содержащую пробелов внутри себя. Вывести на экран монитора все слова, а также их количество. program slova_barier; var c: char; st, sl: string; n, i, k: integer; BEGIN write ('stroka: '); readln(st); st: =st+'_'; n: =length(st); i: =1; while i<=n do begin sl: =''; if st[i]='_' then inc(i) else begin while (st[i]<>'_') do begin sl: =sl+st[i]; inc(i) end; writeln(sl); inc(k); end; writeln(k)
ДЛИННЫЕ СТРОКИ
Задача 1. Дана строка s. Группы символов, разделённые пробелами (одним или несколькими) и не содержащие пробелов внутри себя, будем называть словами. а) Подсчитать количество слов в данной последовательности. начало k: =0 c нет C=‘ ‘ и не конец строки c k: =k+1 да нет C=‘ ‘ и не конец строки c нет конец строки конец да да k Program n_a; uses crt; Var c: char; k: byte; BEGIN clrscr; k: =0; Write(‘Введите текст: '); read(c); Repeat While(c=' ') and Not eoln Do Read(c); inc(k); While(c<>' ') and Not eoln Do Read(c); Until eoln; Write. Ln('k= ', k: 3); END.
Задача. Дана строка s. Группы символов, разделённые пробелами (одним или несколькими) и не содержащие пробелов внутри себя, будем называть словами. Вывести слова, а также их количество. program slova_iz_stroki; var c: char; sl: string; k: integer; begin k: =0; read(c); while not eoln do begin while (c='_')and not eoln do read(c); if eoln then break; sl: =''; while(c<>'_')and not eoln do begin sl: =sl+c; read(c); end; if eoln then sl: =sl+c; writeln(sl); inc(k) end; writeln(k); end.
Задача. Дана строка s. Группы символов, разделённые пробелами (одним или несколькими) и не содержащие пробелов внутри себя, будем называть словами. Вывести слова, а также их количество. program slova_iz_stroki; var c: char; sl: string; k: integer; begin k: =0; read(c); while c<>#13 do begin while (c='_')and (c<>#13) do read(c); if c=#13 then break; sl: =''; while(c<>'_')and (c<>#13) do begin sl: =sl+c; read(c); end; writeln(sl); inc(k) end; writeln(k); end.
б) Подсчитать количество букв а в последнем слове данной последовательности Program n_b; uses crt; Var c: char; st: string[50]; i, k, n: byte; BEGIN clrscr; k: =0; Write('Vvedite tekst: '); read(c); Repeat While(c=' ') and (c<>#13) Do Read(c); st: =''; While (c<>' ') and (c<>#13) Do Begin st: =st+c; Read(c); End; Write. Ln('st=', st); Until c=#13; n: =ord(st[0]); FOR i: =1 To n Do If st[i]='a' Then inc(k); Write. Ln('k= ', k: 3); read. Ln END.
в) Подсчитать количество слов, начинающихся с буквы б. Program n_v; uses crt; Var c: char; st: string[50]; k: byte; BEGIN clrscr; k: =0; Write('Vvedite tekst: '); read(c); Repeat While(c=' ') and (c<>#13) Do Read(c); st: =''; While(c<>' ') and (c<>#13) Do Begin st: =st+c; Read(c); End; Write. Ln('st=', st); If st[1]='b' Then inc(k); Until c=#13; Write. Ln('k= ', k: 3); read. Ln END.
в) Найти длину самого короткого слова Program n_g; uses crt; Var c: char; st: string[50]; k: byte; BEGIN clrscr; k: =255; Write('Vvedite tekst: '); read(c); Repeat While(c=' ') and (c<>#13 Do Read(c); st: =''; While(c<>' ') and (c<>#13 Do Begin st: =st+c; Read(c); End; Write. Ln('st=', st); If ord(st[0])<k Then k: =ord(st[0]); Until c=#13; Write. Ln('k= ', k: 3); read. Ln END.
Примеры решения задач(по флагу) 2. Определите, сколько букв содержит самое короткое слово во введённой строке символов. На вход программе подаётся строка, состоящая не более чем из 255 символов, заканчивающаяся точкой. Слова разделяются одним или несколькими пробелами. Выведите искомое число.
S: =‘’ Min: =255 K: =0 F: =false c да f да да C <>‘_’ Inc(k) да K<min Min: =k K: =1 F: =false нет F: =true C=‘. ’ C <>‘_’
На вход программе подаётся строка символов. Слова разделяются одним или несколькими пробелами. Выведите все слова. program slova_flag; uses crt; var c: char; f: boolean; sl: string; BEGIN f: =false; sl: =''; write ('stroka: '); repeat read(c); if f then if c<>'_' then sl: =sl+c else begin writeln(sl); f: =false end else if c<>'_' then begin f: =true; sl: =c end; until c=#13; writeln(sl); readln END.
Обработка строк по словам Словом называют набор символов, ограниченный с обеих сторон пробелом. Задача 1 Дана строка, слова в которой разделены пробелом. Выделить из данной строки слова минимальной и максимальной длины и проверить, содержат ли они сдвоенные нн PROCEDURE WORDS(St: String; P: Integer; VAR SS: String); Var i: Integer; BEGIN SS: =‘’; i: =P; While i <= length(St) Do If St[i]<>’ ‘ Then Begin SS: =SS+St[i]; inc(i) End Else i: =Length(St) + 1; END;
PROGRAM z 1; VAR s: string; sl, min, max: string; k, nmin, nmax: byte; PROCEDURE Words (St: string; P: byte; VAR ss: string); Var i: byte; Begin ss: =''; i: =P; WHILE i<=length(St) Do If St[i]<>' 'Then Begin ss: =ss+St[i]; inc(i); End Else i: =Length(St)+1; End; BEGIN Write. Ln('Введите строку: '); Read. Ln(s); k: =1; nmax: =0; nmin: =255;
While k<=Length(s) Do Begin Words(s, k, sl); k: =k+Length(sl)+1; If Length(sl)>nmax Then Begin nmax: =Length(sl); max: =sl; End; If Length(sl)<nmin Then Begin nmin: =Length(sl); min: =sl; End; Write. Ln('Слово минимальной длины - ', min); Write. Ln('Слово максимальной длины - ', max); IF POS('нн', max)<>0 Then Write. LN('Слово ', max, ' содержит сдвоенное нн'); IF POS('нн', min)<>0 Then Write. LN('Слово ', min, ' содержит сдвоенное нн'); END.
Обработка строк по словам.ppt