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

Разделы: Информатика


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

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

Все приведенные программы написаны на языке программирования 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.