Переменные символьного типа могут принимать значения одного из символов с кодами от 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, т.к. первый аргумент лексикографически меньше второго. |