Решение задач по теме "Строки"

Умение решать задачи - такое же практическое искусство, как умение плавать или бегать.
Ему можно научиться только путем подражания или упражнения.
Д. Пойа

В статье представлены задачи различных типов: подсчет частоты появления символа в строке; поиск подстроки в строке, замена найденной подстроки на другую строку; выделение слов из строки, нахождение числа слов в строке, нахождение минимальной (максимальной) длины слова в строке; сравнение и сортировка строк и др.

Все приведенные программы написаны на языке программирования PascalABC.

Задача 1.

С помощью функции копирования и операции конкатенации составить из частей слова "информатика" слово "торт".

program novslovo;

uses crt;

var s, ns: string;

begin

s:='информатика';

ns:=copy(s,8,1)+copy(s,4,2)+copy(s,8,1);

writeln(ns);

end.

Задача 2.

Подсчитать, сколько раз среди символов заданной строки встречается буква "а".

program kolbukv_a;

uses crt;

var s: string;

i, k: integer;

begin

write('Введите строку: ');

readln(s);

k:=0;

for i:=1 to length(s) do

if s[i]='а' then k:=k+1;

writeln('Буква "а" встречается ', k, ' раз(а)');

end.

Задача 3.

Найти долю пробелов в строке A.

program dolya;

uses crt;

var a: string;

i, k: integer;

d: real;

begin

write('Введите строку: ');

readln(a);

k:=0;

for i:=1 to length(a) do

if a[i]=' ' then k:=k+1;

d:=k/length(a);

writeln('Доля пробелов в строке ', d);

end.

Задача 4.

Заменить все буквы "а" на буквы "б" в заданной строке.

program zamena_ab;

uses crt;

var s: string;

i: integer;

begin

write('Введите строку: ');

readln(s);

for i:=1 to length(s) do

if s[i]='а' then s[i]:='б';

writeln(s);

end.

Задача 5.

Из заданной строки получить новую, повторив каждый символ дважды.

program udvsimv;

uses crt;

var s, ns: string;

i, j, l: integer;

begin

write('Введите строку: ');

readln(s);

l:=length(s);

j:=1;

for i:=1 to l do begin

ns[j]:=s[i];

ns[j+1]:=s[i];

j:=j+2;

end;

for i:=1 to 2*l do write(ns[i]);

end.

Задача 6.

Дано слово. Вывести слово, содержащее те же символы, но расположенные в обратном порядке.

program slovonaoborot;

uses crt;

var s: string;

i: integer;

begin

write('Введите слово: ');

readln(s);

for i:=length(s) downto 1 do write(s[i]);

end.

Задача 7.

Проверить, является ли заданное слово палиндромом.

program palindrom;

uses crt;

var s: string;

i, l, m, k: integer;

begin

write('Введите слово: ');

readln(s);

l:=length(s);

m:=l div 2;

k:=0;

for i:=1 to m do

if s[i]<>s[l+1-i] then k:=1;

if k=1 then writeln('Слово "', s, '" не палиндром')

else writeln('Слово "', s, '" палиндром');

end.

Задача 8.

Строка X состоит из нескольких предложений, каждое из которых кончается точкой, восклицательным или вопросительным знаком. Определить количество предложений в строке X.

program kolpredl;

uses crt;

var x: string;

i, k: integer;

begin

write('Введите строку: ');

readln(x);

k:=0;

for i:=1 to length(x) do

if (x[i]='.') or (x[i]='!') or (x[i]='?') then k:=k+1;

writeln('В строке ', k, ' предложений');

end.

Задача 9.

Проверить правильность расстановки скобок в формуле. Расстановку считать правильной, если число открывающих скобок равно числу закрывающих скобок.

program skobki;

uses crt;

var f: string;

i, ko, kz: integer;

begin

write('Введите формулу: ');

readln(f);

ko:=0; kz:=0;

for i:=1 to length(f) do begin

if f[i]='(' then ko:=ko+1;

if f[i]=')' then kz:=kz+1;

end;

if ko=kz then writeln('Правильная расстановка скобок')

else writeln('Неправильная расстановка скобок');

end.

Задача 10.

Проверить правильность расстановки скобок в формуле. Учитывать порядок скобок.

Способ 1

program skobki_1;

uses crt;

var f: string;

i, k: integer;

begin

write('Введите формулу: ');

readln(f);

i:=1; k:=0;

repeat

if f[i]='(' then k:=k+1;

if f[i]=')' then k:=k-1;

i:=i+1;

until (k<0) or (i>length(f));

if k=0 then writeln('Правильная расстановка скобок')

else writeln('Неправильная расстановка скобок');

end.

Способ 2

program skobki_2;

uses crt;

var f: string;

i, k, z: integer;

begin

write('Введите формулу: ');

readln(f);

k:=0; z:=0;

for i:=1 to length(f) do begin

if f[i]='(' then k:=k+1;

if f[i]=')' then k:=k-1;

if k<0 then z:=1;

end;

if (k=0) and (z=0) then

writeln('Правильная расстановка скобок')

else

writeln('Неправильная расстановка скобок');

end.

Задача 11.

В заданной строке подсчитать количество букв латинского алфавита.

program kolbukvlat;

uses crt;

var s: string;

i, k: integer;

begin

write('Введите строку символов: ');

readln(s);

k:=0;

for i:=1 to length(s) do

if (s[i]>='A') and (s[i]<='Z') or (s[i]>='a') and (s[i]<='z') then

k:=k+1;

writeln('В строке "', s, '" ', k, ' латинских букв');

end.

Задача 12.

Подсчитать количество цифр в заданной строке.

program kolcifr;

uses crt;

var s, c: string;

i, j, k: integer;

begin

write('Введите строку символов: ');

readln(s);

c:='0123456789';

k:=0;

for i:=1 to length(s) do

for j:=1 to 10 do

if s[i]=c[j] then k:=k+1;

writeln('В строке "', s, '" ', k, ' цифр');

end.

Задача 13.

Из заданной строки получить новую, удалив из нее все пробелы.

program udalprobel;

uses crt;

var s, ns: string;

i, k: integer;

begin

write('Введите строку: ');

readln(s);

k:=0;

for i:=1 to length(s) do

if s[i]<>' ' then begin

k:=k+1;

ns[k]:=s[i];

end;

for i:=1 to k do write(ns[i]);

end.

Задача 14.

Из заданной строки получить новую, удалив все буквы латинского алфавита.

program udalbukv;

uses crt;

var s, ns: string;

i, k: integer;

begin

write('Введите строку: ');

readln(s);

k:=0;

for i:=1 to length(s) do

if (s[i]<'A') or (s[i]>'Z') and (s[i]<'a') or (s[i]>'z') then begin

k:=k+1;

ns[k]:=s[i];

end;

for i:=1 to k do write(ns[i]);

end.

Задача 15.

Подсчитать, сколько раз встречается в тексте заданный фрагмент.

program kolfragm;

uses crt;

var t, f: string;

i, k: integer;

begin

write('Введите текст: ');

readln(t);

write('Введите фрагмент: ');

readln(f);

k:=0;

for i:=1 to length(t) do

if copy(t, i, length(f))=f then k:=k+1;

writeln('Фрагмент "', f, '" встречается в тексте ', k, ' раз(а)');

end.

Задача 16.

Проверить, является ли частью данного слова слово "сок". Ответ должен быть "да" или "нет".

program chastslova;

uses crt;

var s: string;

i, f: integer;

begin

write('Введите слово: ');

readln(s);

f:=0;

for i:=1 to length(s) do

if copy(s, i, 3)='сок' then f:=1;

if f=1 then writeln('да')

else writeln('нет');

end.

Задача 17.

В заданной строке всюду "1999" заменить на "2000".

program zamena_1999;

uses crt;

var a: string;

i: integer;

begin

write('Введите строку: ');

readln(a);

for i:=1 to length(a) do

if copy(a,i,4)='1999' then begin

delete(a, i, 4);

insert('2000', a, i);

end;

writeln(a);

end.

Задача 18.

Ввести с клавиатуры строку, содержащую фамилию, имя и отчество. Слова в строке разделять одним пробелом. Получить новую строку, содержащую фамилию и инициалы.

program fio;

uses crt;

var s, f, i, o: string;

p: integer;

begin

write('Введите фамилию, имя и отчество: ');

readln(s);

p:=pos(' ', s);

f:=copy(s, 1, p-1);

delete(s, 1, p);

p:=pos(' ', s);

i:=copy(s, 1, 1);

delete(s, 1, p);

o:=copy(s, 1, 1);

s:=f+' '+i+'.'+o+'.';

writeln(s);

end.

Задача 19.

Подсчитать количество слов в исходной строке. Слова считать отделенными друг от друга одним пробелом.

program kolslov;

uses crt;

var s: string;

i, k: integer;

begin

write('Введите строку: ');

readln(s);

s:=s+' ';

k:=0;

for i:=1 to length(s) do

if s[i]=' ' then k:=k+1;

writeln('Количество слов в строке ', k);

end.

Задача 20.

Подсчитать количество слов в исходной строке. Слова считать отделенными друг от друга одним или несколькими пробелами.

program kolslov;

uses crt;

var s: string;

i, k, f: integer;

begin

write('Введите строку: ');

readln(s);

s:=s+' ';

k:=0;

f:=0;

for i:=1 to length(s) do begin

if (s[i]<>' ') and (f=0) then f:=1;

if (s[i]=' ') and (f=1) then begin

f:=0;

k:=k+1;

end;

end;

writeln('Количество слов в строке ', k);

end.

Задача 21.

Проверить цепочку слов на совпадение первой буквы следующего слова с последней буквой предыдущего слова.

program igra_v_slova;

uses crt;

var s: string;

i, f: integer;

begin

write('Введите слова через пробел: ');

readln(s);

f:=0;

for i:=2 to length(s)-1 do

if s[i]=' ' then

if s[i-1]<>s[i+1] then f:=1;

if f=0 then writeln('Совпадают')

else writeln('Не совпадают');

end.

Задача 22.

Определить наименьшую длину слова в заданной строке. Слова считать отделенными друг от друга одним или несколькими пробелами.

program mindlina;

uses crt;

var s: string;

i, lw, min: integer;

begin

write('Введите строку: ');

readln(s);

s:=s+' ';

min:=length(s);

lw:=0;

for i:=1 to length(s) do begin

if s[i]<>' ' then

lw:=lw+1

else if (min>lw) and (lw>0) then begin

min:=lw;

lw:=0;

end

else

lw:=0;

end;

writeln('Наименьшая длина слова ', min);

end.

Задача 23.

Ввести с клавиатуры 10 слов и вывести их на экран в алфавитном порядке.

program sort_slov;

uses crt;

const n=10;

var s: array[1..n] of string;

pp: string;

i, j: integer;

begin

writeln('Введите слова:');

for i:=1 to n do

readln(s[i]);

for i:=1 to n-1 do

for j:=i+1 to n do

if s[i]>s[j] then begin

pp:=s[i];

s[i]:=s[j];

s[j]:=pp;

end;

writeln('Список слов по алфавиту:');

for i:=1 to n do

writeln(s[i]);

end.