#17 Строки как одномерные массивы символов в Паскаль. Примеры кода программ

Ранее мы с вами познакомились с одномерными массивами, теперь посмотрим как эти знания помогут нам работать со строками (данными типа string).

Обход символов строки в цикле -- основная идея

Основная идея состоит в том, что строку можно читать посимвольно, обходя её как одномерный массив символов.

Сразу же рассмотрим пример, в котором символы полученной от пользователя строки мы выведем по одному, например в столбик:

var s: string;
    i: integer;
begin
  writeln('vvedite proizvolnuy stroku:');
  readln(s);

  for i:=1 to length(s) do // от 1 до длины строки
  begin
    writeln(s[i]); // выводим очередной символ строки
  end;

  readln();
end.  

-- здесь следует обратить внимание на то, что символы строки нумеруются с единицы. Для определения длины строки (в символах) мы использовали стандартную функцию length().

Примеры

Пример №1 -- сравнение символов строк

Задача:

Пользователь вводит произвольную строку, посчитайте число вхождений в неё символа $w$.

Решение:

var s: string;
    i, n: integer;
begin
  writeln('vvedite proizvolnuy stroku:');
  readln(s);

  n := 0; // значение по умолчанию (инициализация переменной)

  for i:=1 to length(s) do // обходим символы строки
  begin
    if (s[i] = 'w') then // сравниваем очередной символ строки с литералом
       n := n + 1;
  end;

  writeln('Otvet: v vashey stroke simvol "w" vstrechaetsya ',
    n, ' raz.');
  readln();
end.       

Задачи для самостоятельного решения

  1. Пользователь вводит символ $k$ и строку $s$ -- посчитайте сколько раз символ $k$ встречается в строке $s$.
  2. Пользователь вводит произвольную строку, выведите на экран каждый пятый символ или сообщение об ошибке, если строка состоит менее чем из 5 символов.
  3. Пользователь вводит строку произвольных символов, посчитайте количество цифр в ней.

    Подсказка: для определения принадлежности символа цифре используйте идею из этого кода.

  4. Пользователь вводит строку произвольных символов, запишите первые 8 символов цифр в массив и выведете этот массив на экран.

    Подсказка: массив должен быть "of char".

  5. Пользователь вводит строку символов, в которой есть два числа, разделенные другими символами, т.е. строка имеет вид:
    какиетосимволыЧИСЛО1какиетосимволыЧИСЛО2какиетосимволы
    

    необходимо считать данные числа в две строковые переменные s1 и s2.

    например:

    1. для:
      wsefg34teth567gfd

      получим s1='34' и s2='567'

    2. для:
      wsefg22teth88

      получим s1='22' и s2='88'

    3. для:
      15teth47

      получим s1='15' и s2='47'

    Примечание: если никак не получается решить самостоятельно, посмотрите этот разбор решения.

  6. Пользователь вводит строку произвольных символов, выделите из неё массив первых 8 строковых литералов, которые являются числами. И выведите эти числа на экран.

    Например, из строки:

    rew2@#$$#435tr353453t4er4

    должны быть выделены подстроки:

    2
    435
    353453
    4
    4

    Подсказка: массив должен быть "of string".

    Примечание: если никак не получается решить самостоятельно, посмотрите этот разбор решения.

  7. Пользователь вводит произвольную строку, перестройте её в "ёлочку".
    Например, если он ввел:
    rewt34t54346t566

    то в ответ программа должны вывести:

    r
    ew
    t34
    t543
    46t56
    6
  8. Проверить можно ли строки из $m$ перестановкой символов получить строку $n$.
    Примеры (входные данные и ответ):
    • abc и bca

      -- можно

    • abc и baa

      -- нельзя

    • abcc и cbac

      -- можно

    • abc4c и cb55ac

      -- нельзя

  9. Пользователь вводит исходную строку s.
    Ваша программа должна вернуть другую строку, в которой все смежные (соседние) повторяющиеся символы должны быть "удалены" (т.е. повторов в новой строке быть не должно), например:
    • для строки:
      5533g

      вернуть:

      53g
    • для строки:
      b5ghh55788oooggtttttt

      вернуть:

      b5gh578ogt
Romakip's picture

Для седьмой задачи идеально бы подошли многомерные массивы)

vedro-compota's picture

строка это и так массив символов, т.е. тут вполне хватает одномерности

_____________
матфак вгу и остальная классика =)

Pages