БЕСПЛАТНАЯ ПОДГОТОВКА К ЕГЭ ПО ПРОФИЛЬНОЙ МАТЕМАТИКЕ
Подготовься к ЕГЭ-2024 по профильной математике самостоятельно с помощью сервича "1С:Репетитор"!
Понятная теория и эффективные тренажеры с объяснением! Вы успеете подготовиться к экзамену! Начните занятия прямо сейчас!
design_arrow
Обработка символьных и строковых данных

Обработка символьных и строковых данных

Обработка символьных и строковых данных


Символьный тип

Переменные символьного типа могут принимать значения одного из символов с кодами от 0 до 255 (буквы английского и русского алфавита, цифры, знаки препинания и т.д.). Символы с кодами от 0 до 31 (управляющие) в тексте воспринимаются как пробел, а в операторах вывода как символ или команда.


Паскаль

Си

Описание

var
 a, с, en, es: char;

char a, с, en, es;

В С переменная типа char занимает в памяти 1 байт и служит для хранения как символов, так и целых чисел.

Примеры присвоения значения

a:= 'A';
c := #33; {символ "!" задается значением кода}
en := #13; { код клавиши Enter }
es:= #27; { код клавиши Esc }
a= 'A';
c= 33; //символ "!" задается значением кода
en=13; //код клавиши Enter 

es= 27; // код клавиши Esc

Примеры вывода

Write(с);    { выводится символ "!" }
Write(en);   { команда перевода курсора на новую строку }
Write(еs);    { выводится специальный символ, соответствующий коду #27 }
printf("%c",с);   // выводится символ "!" 
printf("%c",en);   // команда перевода курсора на новую строку 

printf("%c",еs);    // выводится специальный символ, соответствующий коду #27

Функции преобразования типов переменных

Chr(x), где аргумент типа Byte, а результат типа Char- возвращает символ, у которого код в таблице ASCII равен х;

Ord(x), где аргумент может быть любого порядкового типа, а результат типа Longint - возвращает порядковый номер значения х при начале нумерации с нуля;

Не требуются


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

Переменная строкового типа задается набором символов, заключенных в кавычки. Выражения, в которых операндами служат строки, являются строковыми выражениями. Результат – строка.

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

К отдельным символам строкового типа можно обратиться по номеру этого символа в строке (аналогично индексу в массивах). Например, s1[3].


Паскаль

Си

Описание

var
 s1 : string[35]; { Длина переменной s не более 35 символов }
 s2 : string;    { длина переменной не указывается, наибольшее число символов равно 255 }
char
s1[35]; //Длина переменной s1 не более 34 символов, один байт для хранения символа конца строки;

s2[]; // длина переменной не указывается, автоматически определяется компилятором

Примеры присвоения значения

s1:= 'информатика';
s2:= 'Экзамен состоится 27 мая';

Присваивание возможно только при определении переменных:

char s1[35]= "информатика";

char s2[]="Экзамен состоится 27 мая";

Для переменной s2 будет выделено 25 байт

Операции

'+' - Операция сцепления

'Класс'+' 11'+'а' дает результирующую строку 'Класс 11а'.

В С операции со строками не определены, обработка происходит с помощью функций.

=, < >, >, <, >=, <= Операции отношения

Операции отношения более высокий приоритет, чем операция сцепления. Сравнения между строками производятся посимвольно, слева направо, до первого несовпадающего символа. Та строка считается больше, в которой первый несовпадающий символ имеет больший код по таблице кодов. Результаты сравнения – True или False. Если строки имеют различную длину и более короткая совпадает с началом более длинной, то последняя считается большей.

 


 


Процедуры обработки строк в Паскале

Delete (st, Poz, N) – удаление N символов из строки с именем st, начиная с позиции Poz.

st:='город_Москва'; Delete (st, 1, 6);

Результат 'Москва'.

insert (stl, st2, poz); – вставка строки stl в строку st2, начиная с позиции Poz.

st2: = 'Экзамен информатике'

st1: ='по_';

insert (stl, st2, 8);

Результат: Экзамен по информатике;

str (IBR, st); преобразует число IBR (типа integer, byte или Real) и помещает результат в строку st. Возможно после IBR указать ширину поля. Если ширины поля не хватает, оно автоматически расширяется до нужной величины.

str (1500:6, stl); даст результат '_1500';

str (4.8е+03:10, stl); – результат '_ 4.800E+03';

str (-46854:3, stl); – результат '-46854'.

Val (st, IBR, Cod); процедура преобразует значение st в величину целочисленного или вещественного типа и помещает результат в IBR. Значение st должно содержать символьное изображение числа и не содержать символов, не присущих изображению чисел (например, пробелов перед цифрами), букв и т.п. Cod - целочисленная переменная индуцирующая ошибку. Если Cod=0, преобразование произведено без ошибки, если Cod=5, то ошибка при преобразовании – 5 символов.

Функции обработки строк

Length (st) определяет длину строки, результат – integer.

writeln (Length ('город Москва'));

результат 12

 

Сору(st, Poz, N) выделяет из st подстроку длиной N символов, начиная с позиции Poz.

stl:='qwertyu'; writeln (Сору (stl, 2, 3));

результат wer

 

Concat(stl, st2,..., stn) выполняет сцепление строк stl... stn. Длина суммарной строки не должна превышать 255 символов.

 

Pos (stl, st2) обнаруживает первое появление строки stl в строке st2. Результат – целое число, определяющее номер позиции, в которой находится первый символ подстроки st1. Если st1 не содержится в строке st2, то результат равен 0.

writeln (pos (‘Мос’,'город Москва'));

результат 7

 

UpCase (ch) преобразует строчную букву в прописную.

Параметр и результат имеют литерный тип.

ch:=a'; UpCase (ch) имеет результат 'A'.


  


Функции работы со строками в Си

Преобразования числа в строку:

sprintf(st,"%7d",IF);

sprintf(st,"%7f",IF);

преобразует число IF (типа integer или Float) и помещает результат в строку st. Возможно указать ширину поля. Если ширины поля не хватает, оно автоматически расширяется до нужной величины.

sprintf(char *s,формат преобразования,{список указателей на данные});

sprintf(char *s,"%3d %5.2f",d1,f);

в строке выводятся 2 числа (целое и с плавающей точкой). Под целое число отводится 3 символа. Если оно не помещается, под число отводится больше символов. Если в нем меньше 3 цифр, в начале дополняется пробелами.  Можно указать %03d, тогда для d1=7 недостающие цифры дополняются слева нулями - 007. По формату %5.2f под число с плавающей точкой выделяется 5 символов, из них 2 для цифр после запятой.

Преобразования строки в число

 int atoi(char*st)

float atof(char*st)

strlen(char *st) 

Функция strlen возвращает длину строки st, причем нулевой символ окончания в длину не засчитывается.

printf("%d",strlen("город Москва"));

результат 12

Не путайте размер массива, который содержит строку и длину строки. Например:

char st1 [100] = "строка";

В данной строке массив имеет размер 100 символов, но строка в этом массиве имеет длину всего 6 символов. Таким образом, если выполнится оператор sizeof(st1), ответ будет 100, а если — функция strlen(st1), ответ 6.

strcpy()

char *strcpy (char *, const char *) - копирует строку, на которую указывает второй параметр, в строку, на которую указывает первый параметр. Таким образом, первый параметр изменяется. Функция возвращает указатель на первый символ строки:

               char s1[10], s2[10];

               char *s3;

               s3 = s2;

               gets(s1);

               s3 = strcpy(s2,s1);

               puts(s2);

               puts(s3);

               printf("%p, %p\n", s2, s3);

s2 и s3 указывают на один и тот же символ (printf() выводит одинаковые адреса). Однако то, что возвращает strcpy(), нельзя присвоить массиву. 

Результат работы этой функции обычно ничему не присваивают; бывает достаточно того, что она просто изменяет одну из переданных по указателю строк.

 

strcat() сцепление строк

char *strcat(char *string1,char *string2);

присоединяет символы второй строки к первой. 

string1 - строка-приемник

string2 - строка-источник

 

strncat()

char *strcat(char *string1,char *string2,int n);

присоединяет n символов второй строки к первой.

 

strcspn()

int strcspn( const char * st1, const char * st2 );

обнаруживает первое появление любого из символов строки st2 в строке st1

Результат – целое число, определяющее номер позиции, в которой находится символ из  st2. Если любой символ st2 не содержится в строке st1, то результат равен длине строки st1.

sb=strcspn("город Москва\n","М");

результат 6

 

strcmp()

 int strcmp (const char *, const char *)

сравнивает две строки-аргумента по символам  и возвращает 0, -1 или 1. 

Например, вызов strcmp("boy", "body") вернет 1, т.к. код буквы 'y' больше буквы 'd'.

Вызов strcmp("body", "boy") вернет -1, т.к. первый аргумент лексикографически меньше второго.