Персональная страничка
Диканева Тараса
Викторовича

Главная \ Преподавательское \ Программирование для начинающих

14. Символы, строки, текстовые файлы

Предыдущий раздел:

Следующий раздел:

14.2. Строковый тип

Значениями строкового типа (string) в Паскале являются последовательности символов длиной от 0 (пустая строка) до 255 символов. Можно описать строку, предельная длина которой меньше 255, эту длину в квадратных скобках. Примеры описания строк:

  var
    s1, s2: string; {Обычные строки длиной до 255 символов}
    name: string[20]; {Строка длиной не более 20 символов}
    group: string[3]; {Строка длиной не более 3 символов}
    txt: array [0..99] of string[80]; {Массив из 100 строк 
      длиной не более 80 символов}

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

s1[2] – второй символ строки s1;
s2[i] – i-й символ строки s2;
txt[3][10] – десятый символ третий строки из массива txt.

Нумерация символов в строке начинается с 1. В памяти строка занимает на 1 байт больше, чем это необходимо для хранения символов. Самый первый (нулевой) байт хранит длину строки. Поэтому присваивание вида: s1[10]:=’x’ приведет к желаемому результату, только если в строке десять или больше символов. Та же операция по отношению к более короткой строке не приведет к ее изменению.

Строки можно считывать и печатать обычными процедурами ввода/вывода: read, readln, write, writeln.

Для строк определена операция сложения. При этом складываемые строки объединяются в одну. Например:

  s1:='abra';
  s1[1]:=Upcase(s1[1]);
  s2:='kadabra';
  s1:=s1+' '+s2+'!';
  writeln(s1);

Здесь первый символ строки s1 (строчная «a») был заменен на прописную «A». Затем к этой строке был добавлен пробел и строка s2. В итоге программа напечатает строку ‘Abra kadabra!’.

Переменную или выражение типа Char также можно прибавить к строке.

Отдельные символы строки (s1[1], s1[2] и т.д.) можно рассматривать как переменные типа Char. В примере мы воспользовались этим, заменив строчную букву заглавной.

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

  S := '';

Обратите внимание, что «ничего» в данном случае, значит совсем ничего. Часто, пытаясь задать пустую строку, ставят между кавычками пробел, что неправильно.

Некоторые процедуры и функции для работы со строками:

1) Length(s) – получение длины строки.

2) Pos(Substr, S) – функция, в качестве результата выдающая номер символа, начиная с которого в строке s начинается подстрока Substr. Если S не содержит подстроки Substr, то результат будет равен 0.
Например: Pos(‘ ‘, s) – найдет номер позиции, на которой в строке s находится пробел. Pos(‘Ivan’, s) найдет имя ‘Ivan’.

3) Copy(s, i, n) – функция, выделяющая из строки s подстроку, начиная с символа за номером i, и включающую n символов. Например:

  s1:='abracadabra';
  s1:=Copy(s1, 5, 6);

В результате строка s1 будет равна ‘cadabr’.

4) Delete(s, i ,n) – процедура, удаляющая из строки s n символов, начиная с символа с номером i.

5) val(s, n, code) – процедура, переводящая строку s в число n. Если преобразование произошло успешно, то code будет равна 0, если нет, то в эту переменную будет записан код ошибки. Конкретнее, Pascal ABC при неудаче запишет туда 1, а все прочие Паскали (Borland pascal, Delphi, Free pascal) — номер первого неправильного символа, то есть не являющегося цифрой, знаком «-«, символами «e» или «E» или десятичной точкой.

6) str(n, s) – процедура, переводящая число n в строку s.

7) Для преобразования чисел в строки и обратно также удобно пользоваться функциями:

StrToInt(s) — функция, возвращающая целочисленное значение, записанное в строке s.

StrToFloat(s) — функция, возвращающая вещественное значение, записанное в строке s.

IntToStr(x) — функция, возвращающая строковое значение, содержащее целое число x.

FloatToStr(x) — функция, возвращающая строковое значение, содержащее вещественное число x.

Заметим, что данные функции не будут работать, если вы программируете в среде Borland Pascal.

Следующий раздел:

Предыдущий раздел:

7 комментариев

  1. Начинающий паскалист

    Предлагаю дописать характеристику функции val. А именно о коде ошибки. Она выдает не просто номер ошибки, а номер первого символа в переводимом тексте, который не является числом.Это полезно знать при решении некоторых задач.

  2. Taras

    Спасибо за замечание. Описание дополнил.

  3. Начинающий паскалист

    И Вам спасибо за информацию, я даже не знал, что в АВС только нуль или единица:)

  4. оксана

    а это одинаковые функции?:
    StrToInt(s) — функция, возвращающая целочисленное значение, записанное в строке s.

    StrToFloat(s) — функция, возвращающая целочисленное значение, записанное в строке s.

  5. Taras

    StrToFloat — превращает строку в вещественное число. Опечатка. Спасибо.

  6. новый программист

    Таррас покажете мне эти все программы полностью на языка С++ . Спасибо заранее.

  7. Ruslan

    «txt[3][10] – десятый символ третий строки из массива txt.»

    Непонятное предложение. Может имели ввиду:
    » txt[3][10] – десятый символ третЬЕй строки из массива txt.»

Добавить комментарий