В Pascal строкой называется массив из Литерных символов, где 0-ое значение занято размером строки.
Общее.
При объявлении строки можно задать её размер. Максимальный размер строки 255 символов. По умолчанию, если размер строки не указан явно, в Borland Pascal и Turbo Pascal размер строки будет равен 255 символов, в UCSD Pascal – 80. В FreePascal и Delphi не ограниченная переменная string имеет на самом деле имеет тип AnsiString который может занимать максимальный размер в памяти до 2 Гб это 2147483646 символов.
В Object Pascal строковая переменная так же имеет ограничение в 2 Гб.
Объявление строки.
Что бы объявить строку, в блоке var надо указать тип string и возможно указать кол-во элементов, по следующему шаблону:
<имя переменной 1>,<имя переменной 2>, … ,<имя переменной n>:string;
или
<имя переменной 1>,<имя переменной 2>, … ,<имя переменной n>:string[<кол-во символов в строке>];
Пример объявления строковой переменной:
1 2 3 4 5 |
var s:string; s1,s2:string[80]; |
Можно так же объявить строку, через объявления пользовательского типа.
Шаблон такого способа будет выглядеть так:
type
<имя пользовательского типа> = string [максимальная длина строки];
var
<имя переменной 1>,<имя переменной 2>, … ,<имя переменной n>: <имя пользовательского типа>;
Пример:
1 2 3 4 5 6 7 |
type MyString = string[80]; var s: MyString; |
Процедуры предназначенные для работы над строками:
Delete
Procedure Delete(Var Str: String; Poz: Integer; Count: Integer); — Из строки Str удаляет Count символов, начиная с позиции Poz.
Пример:
1 2 3 4 5 6 7 8 |
program DeleteString; var Str:string; begin Str:='123456789'; Delete(Str,3,4); Writeln(Str); end. |
В результатае строка Str будет иметь значение ‘12789’ соответственно 4 символа начиная с третьего были удалены ‘3456’.
Insert
Procedure Insert(S: String; Var Str: String; Poz: Integer); — Вставляет строку S в строку Str, начиная с позиции Poz.
Пример:
1 2 3 4 5 6 7 8 9 |
program InsertString; var Str:string; begin Str:='123456789'; Insert('000',Str,3); Writeln(Str); Readln; end. |
В результатае строка Str будет иметь значение ‘120003456789’ соответственно была вставлена подстрока ‘000’ начиная с третьего символа.
Str
Procedure Str(IR:[Integer;Real] ; var Str: String); — Преобразует числовое значение IR в строку, и помещает его в строку Str.
Пример:
1 2 3 4 5 6 7 8 |
program IntOrRealToString; var S:string; begin S:=''; Str(123,S); Writeln(S); end. |
В результате строка S будет иметь значение ‘123’.
Val
Procedure Val(Str: String; var IR:[integer, real]; var Error: Integer); — Преобразует значение Str в целочисленный или вещественный тип и помещает результат в переменную IR. В переменную error будет помещаться позиция первого символа, на котором произошла ошибка.
Пример:
1 2 3 4 5 6 7 8 9 10 |
program StringToRealOrInteger; var S: string; i, error: Integer; begin S:='123a'; Val(S,i,Error); Writeln(i); Writeln(Error); end. |
В результате переменная i будет содержать число 123, а переменная Error число 4 .
Функции предназначенные для работы со строками:
Copy
Function Copy(Str: String; Poz: Integer; Count: Integer): String; — функция Сopy возвращает строку содержащую Count символов, начиная с Poz.
Пример:
1 2 3 4 5 6 7 8 |
program StringCopy; var S,SCopy: string; begin S:='123456789'; SCopy:=Copy(S,2,4); Writeln(SCopy); end. |
В результате в переменной SCopy будет строка ‘2345’ .
Concat и +
Function Concat(Str1[,Str2,…,StrN]: String): String; — Результатом функции будет строка, являющаяся объединением строк Str1[,Str2,…,StrN]. Если в результате получится строка больше 255 символов, то строка обрежеться до 255 -ого символа.
Пример:
1 2 3 4 5 6 7 |
program ConcatString; var S: string; begin S:=Concat('123','4','5','678','9'); Writeln(S); end. |
В результате в строке S будет значение ‘123456789’.
Такой же результат можно добиться используя оператор + (сложения):
1 2 3 4 5 6 7 |
program ConcatString; var S: string; begin S:='123'+'4'+'5'+'678'+'9'; Writeln(S); end. |
Length
Function Length(Str: String) : Integer; — результатом данной функции будет текущая длина строки.
Пример:
1 2 3 4 5 6 7 |
program LengthString; var I: Integer; begin I:=Length('123456789'); Writeln(I); end. |
В результате в переменной I будет содержаться число 9, что соответствует длине строки ‘123456789’.
Pos
Function Pos(S: String; Str: String): Byte; — Функция Pos возвращает позицию первого вхождения строки S в строку Str. Если строки S нет в строке Str, то возвращается 0.
Пример:
1 2 3 4 5 6 7 |
program PosString; var i: integer; begin i:=Pos('456','123456789'); Writeln(i); end. |
В результате в переменной i будет содержаться число 4, что соответствует началу первого вхождени подстроки ‘456’ в строку ‘123456789’.
Так же к строкам можно применить логические операции:
‘=’ — операция равно. Если две строки равны результат будет TRUE, в противном случае FALSE.
<> — операция не равно. Если строки равны результат будет FALSE, в противном случае TRUE.
<,>- операции больше или меньше. Сравнивает две строки по алфавиту. так например ‘a'<‘bc’ и ‘ab'<‘c’ и ‘A'<‘a’.
1 2 3 4 5 6 7 |
program LogString; begin Writeln('Àíòîí'<'John'); {FALSE} Writeln('Anton'='John'); {FALSE} Writeln('Anton'='Anton');{TRUE} Readln; end. |
Хорошой сайт, хорошой
тут ошибка в слове алфавит!!!!!!!
Спасибо, поправил.
можно ли сделать через строки сложение длинных целых чисел
сделать можно … но мне кажется инструмент не тот.. или я вас не так понял.
В классическом паскале строки 255 символов. Конечно в современных реинкарнациях максимальное количество символов должен быть больше. Но всё равно это как то не рационально. Предлагаю числа хранить в файлах.
Брать посимвольно, складывать сохранять в конец 3 файла. и в памяти надо хранить 1 или 0.
В итоге в случае прирывания процесса… чисто теоретически мы можем начать с места на котором остановились.
Если же числа не настолько большие… то в принципе в современных компиляторах есть всякие типы double. которые вполне справляются со сложением больших чисел. (вопрос точности 🙂
Например Powershell:
результат:
8,88888888888889E+253