А.А. Белеванцев, С.С. Гайсарян, Л.С. Корухова, Е.А. Кузьменкова, В.С. Махнычев - Алгоритмы и алгоритмические языки (1113416), страница 7
Текст из файла (страница 7)
Л1обйя п)хц-рйммй 00))йботкй строк Определяет консц сг)х3ки именно НО лайиОму снм130лу Г ' 3 б ). КРО,' ' гПОЙ Особсииости, Можно ОТМСТИТЬ Следу10ц' ' спе13ифическнс Осооснности сгрОк: 4' сз)зггкга нс может содсржать ВИУт)3И ссОЯ симВОЛ ' КОДОМ О, В язь1кс Г'и нс прсдусмОтреио ОГРаничсннй на д3и Ст)30КИ, ь длина строки не содержится В строке 3В ОГличис гЗРУГНХ ЯЗЫКОВ П)3ОГРЗММИРОВЗННЯ, ГДС СС1Ь ПОНЯ Ст)ЗОК31 13еремей33011 ДЛИНЫ). Определение строки Оформляется как Опрсдслсн символьного массива соотвсгсгвук3113СГ13 ги1И1, например: 013ЗГ Б ~Н);/г Г"Грокгз МЗ 33 ОнвгВОЛОВ Максимальнос кох1нчссГВО значагцих симВОлов тако ~тр~ки равно и — 1, по~~ольку в стрсгке Всегда должа ПрисузетвовгЗТЬ СИМВОЛ ' ~ б '. При Оп)3сдслснии ст)30ки по зналОГНН с мзссиваМ",.
можно задать сс ниициализацик3. Для инициализации стрё исиользукпся строкОвыс константы 1строкОВЫС литералы' ВИДЗ "':13ОСЛЕДОВЗ*ГВЛЬНОСТЬ СИМВОЛОВ>"', 'гака' константа имес1" тий спа3: сойв ~ и В сВОсм Внутренне прсдсча13леиии заканчивастсл символом ' '3 б ', позтс3мул факзнческая дли1га константнОЙ строки в памяти Всегда нз $ боль1це, чем количество символов, указанных в двойн кзВычках.
Н3цзримср, инициализация: оба г ет 11.03 г = "е 'ог" ,. г Й 3 г е г .„г 1 Й» г , г г" ь), г ) Р г ляет сзтгОку' из )б симВОлОВ. ЛСРВыс лять из кОторык ЦПРСДО" ', ',.г.1Т1 ' КЗЛЗНИЬЗС В С"1РОКОВОЙ КОНСТЗИТС зиаче31ИЯ, В 1ЦССТОЙ П;г1ггг1гм сод- )33кйть снмвйл с кодом б. Йак н В случае СТЧДЕТ Симвг33- 3, 1ьных Констант, префикс Е, 1гозволяст з;дать стрсгковм30 к13иста 13.13п) В кОд31130вке ))010033)е, нап)3имер., ь"3313.'.,Ообе В, -.,-,-.'.П С1" Зг3ЛЯ ВВОДВЖВЬ1В33гза СТРОК МОЖИТ ИСПОЛЬТОВЗТЬ фуНКЦИИ „,ьЗП".' И РГ1Ггс 1 СО СПСЦНфИКЗТО)30М фОРМЗТЗ Ва ))З1313ИМС)3 3 фчикц31я Всзп псзсле3ЗОвателы10 СМНГываст В строку асг Символы ВВодимОЙ строки 1п)зедваритслы10 п)3013устнВ п)3ойелы, симВО.'3ы псрсвода иа схгсдуг01цукг сг130ку и .1.0,) и автоматически лооавлл1*.Т В конец ст)н3ки Символ ' ', б '.
Ввод выйолилстсл ДО первого Си~вол~ про1бс31, си~в~~~ перевода на слсз1у3оцг,ук3 строку и тл1. (позн3ый перечень таких символов рм, в 33пис3цзин функции воапб )))). Размер массива абг дол3ксн быть Достато'1иым Дли размсьцсннЯ В нем ВВОДИЬ1ОЙ 01роки и добавленного к исй символа ' '3 Й ' . С:)1цсственныы ЛЕДОСТЗТКОМ ЛЗНЦИЯО ВЗРНЗПТа ФУНКЦИИ ВОЗ132, ЯВЛгЧСТС31 То„ '.1ЛССЬ г1ИКЗК НС КО13ТРОЛИ13УетЕЯ КОЛИЧЕСТВО ВВОДИМЫХ символов, по может нредсгав31Ять у1 Розу ДЛЯ Работы ггР33граь3гмы. 1)03зтом)г при использОВании фу313ц1И31 асао '. рекоь3ендустгсл задавать ограничение на размер вводимой СТРОК31" сбаь в-- 1о Всеоб :: взод с-: 9 03ЬЧЗВОлоь.
с ЛАЗИЛ И31"-::1 ', Й В КОНЕЦ 03'Рокнг ) ЬЦ3оз СГ01г и ВСТ1101; рт'пбб 1"Вв", апв1 11ри ВьГВОде ст)зоки на печать выВОЛЯтсЯ Все знача символы строки До символа ' ~ 0 ' . 6,2,2. Работа со Отроками З Л:1З' ~ вю — св„* ГВ~ Л '1дДцчп . 1 еализовать функцию с прозхтти!зом: 11пи работе со строками используется стандарти библжлека функций. Подключить ее мохкно директи ' преп)зоцессора: 4 1001ис1В: вк хай, Й> В качестве примеров работм со сз1роками рассмотри ' реализацию некоторых ф;нкций из зтой оиблиотеки.
П Обработке С~рок удоопо использова~ь указатели. что н буде" продемонст)зи1юВано В приведенных питке п)зимерах. )рдочц 1, Реализовать фуикцикх которая возвраща длину (количестВО значащих симВОПОВ) строки ов, п)ъототипоы: Язве Г вы) еп 1оопвт сйа с св, 'з Где в).ве с — зто тип, которГЯЙ используется в стапдартиой оиблпотеке ь и ДПЯ заДания размерОВ обьекта и являетсч с инОиимом 1ь урез1 в 6) неко ГОЙОГО ЦСПОГО типа 1частсз цпв1опеб .'.Опй). Для реиения задачи Воспользуемся двумя; указателяхщ, Один нз козорых 1св1 будез' мказывать на иачььчр) Строки, а друГОЙ «Вьзр) будем перемеЩВТЬ по С~ро~е Дй„ пе)звОГО символа с кодом О.
Разиость указателей и дасГ; результат функции. и з вккуеп 1сопвс сбвк *са) с1вз ~лмр ий'зе ('С",лр1 /У пока очередной символ Ф:-' Г дяя Р Ввния строки вх,. ~вклкзчая 1 Хб ~) 1З фтйкцня ВОзвращает указатель на первый символ строки аас, взь ь1;-; '- ''С1вь — ~ =- *втсь+~ ВМП; %ноаиой интерес в предлоккенной реализации представляет вь~1зазксние в услощщ Цикла. Оно вьпзисляется следующим образом". беретсЯ символ по указателк1 в то 1после чсГО указатель в, с перелли~ зется иа следспоьции символ копируемой строки) и помепцается по указателю са~, после Исто )казапль бак анщ10Гично передвнтается на следмкощий символ строки. Значением выразкеиия присваивапия является только что скопироваппый символ. Который сравнивается с для коптрОля завс1лцения цикла. Таяны Ооразом, В Результате вьпюлпсыия цикла в строку бвс копируются все символы исходной строки в то, Включая заверцкцоцьай имвол ' ',0'. Обратите внимание на порядок Выполнения Операций „„„„„„„„„„„, .„„„.
„„„,,,, О„ерации я имеют Одинаковый прио)зитет и Вьпзолнякзвся спраВВ налево- Однако постфиксиая Операция +ч нс изменяет (казатель в го, пОка по нсмь ис получсно значснис. В итф': значенисм данного Вы)(ажспня является симВОл„иа КОтор Г указыВал указатель я . с до свосГО инкрсмснтировання заметим, что бноли(этечпая фуз(кпия 511 гсръу ии нс контролирует Возможность переполнения масс (ъо(ггрОль псрсполнсния масснВВ В язьькс (.и Ооя Осу1цсствлять сам пр(эграх(х(исзъ В связи с э рекомендуется использовать более надежный и безопаси ' Вариант функцни к(эпирования ~вг гпсру) с прОтотипом: сйа *Всгпсру (сйаг ~((Б. р с(,пап сйаг "вгс~ в.'хе г. В к010)(ом п)зсдусмотрс(ьа возмОжность ОГраппчить разы' копируемои строки, ))а)эамегр и задаст ~а~симальное числ копируемых символов.
Данная фъпкция копирует не болев символов строки вгс В с(року бвьх при рсзъльтируки((ая ст)101га дополнЯ(",тсЯ симВОлами ' ъ(О ' „ссли стрОкс В гс мсньшс и снмВОлов. Фунгз(ия ВОЭВраща * '(казатсль па первый символ )1сзультиру10щсй строки 0 вс)( Обрати(с Внимание, что если Длина (количество з(гачащи ' снмволОВ) исхОДИОЙ строки в г с больше или равна и ~ ТФ копир)(отея первые и символо~ строэки и символ ' 'ъО' пръ зтом нс добавляется, Данный коезопасныйя Вариант функции копи)1овгл(ий' ~ь~зкпср~) НО сраВнсиик( с копаснымя Ва)нгантом ~ввгсйу! при своеп )заботе Вьщолняет дополнительныс операции сравнсни(,', количсс(ВВ скопироВанных символОВ с параыстрОМ:,.' и.
что приводит к значительным Дополнит~льным затратам"' (поскольку сама Функция копирования очень проста. 11(хзтоь", нужно делать осознанный выбор между 01(Ясным, но болев производительным вариантом и безопасным, по болея( м(.дленным. Например, пспользов;пь безопасный варна((Х. з ггп Эру только при на ильной проьерке ввода пользователя( ъс ((,.
3 лалс(. Провсрку Выхода за Границы бтфс1та , ррскгп(ос1ь.. - -«-' Н ПРС( =- Мф' ° -в---Оу Ы(10ЛНЯТЬ с( иведс(1 краткое Описанис сцсе нескольких фъ'нкцнй 1 (РИВЕ( (. пьой Оиб(1и(леки для работы со ст,'эоками. йтаидсрг " з. -1(а г' Ф цня (трклп(с1 1васт строк( с.'. В конец строки в; фтнкпия ВОЗВРВ(11' ' ра(пастся указатель на псрВый символ строки в. Так же, как для ; - 'для ФУНКЦИИ КЩ(ПРОВаиия, СУществует более надежный Вариант Этой фъ11кпии с прототипоы: К010рь(и о(ранич(пгаст (<=. П( количссгВО приписываемых снх(в(эльза.
ИмсннО э(ОТ Вариант и )1скомсндь ется ищгояьзовать для конкатснащги ((1)эок. ') 11(т В((гсср (сопле сйа( ((Я ~ сопя(. сйаг "с(.') 1 Фъикгв1я сравннвас'1' в лексикогра()п(чсскок( пОрядкс стрОку =в со стр(экой сс, Если строка св ВОЭВра(Дастся з(качение < О, если строка св Оольщс строки сп, гк(зВра1цастсЯ 11гачснис > О, в слъьчгс )эавснства ст)зок ВОзврап(а(пся значение О.Обратите внимание. что для сравнения строк нельзя использовать операции :==ч ! = н Посколькь' при этОм происходит соагнсни указатсл('и (ад(эссов) на мчала соотвгггствъзоп(их строк, а не самих строк.
) '-паг 'вхгсйг ('сопвс сйаг "св, сГ(аг с1; Ункция возвра(даст указа ГОЛЬ На псрВОЕ вхождсине СимВола с В строку св или В(13(ь сели такого не оказалось, всггспг ( с(эпвь спас сз р спа( с1 1 аа' Гах1 3 1 1 2) =О; 1 < К; 1)-~-1 1 — Глагх1).11) ); фвнкция во)тра)паст ока)тг ль на П01 л1 днес вхо)клен СНМВОла с в строк," св илн Нцт*1. сслн такоГО цс ОклэалОсь. М)101 омерныс массивы. С)прсдсленис и инициалцг дв)ъ)срното массиВЙ ),матрицы), аост)'и к элсмснтам мвтри1 Йсрсдачй мй1рнцы В кйчсствс пйрамсГрй В фу1)кци)0). УЬД, массивь).
зада )и. Г) яэьгкс Сн мсв)сво Определять многомерныс массив,' прн этОм массив раэмсрности и рассматрнвасГся к " Одномсрцьп1 массив, каждын элсмснт которого прсдсгаВля 006011 массив рйэмерности и — т. )Йк, Двчысрн)лй масс является фактнчсскн Одномерным массивом, каждый ')ломе КОТОРОГО В СВОК) ОЧСРСДЬ ТЙКЖС ЯВЛЯСТСЯ ОДНОМСРНЬ., массивом. Далее 6улсм рассматривать ДВ)"мсрн)ие массив ' 1матрицы). Определение двумерного массива тыатрицы) имсц' ВПД: СТИПЛ -'НМНЭ "„«КОЛИЧЕСТВО О 1 .'Холм«)е та о столб)цов'> '* , ГДС е)гнп.- эйДЙст тип элсмснтОБ масснВЙ.
1)ри рйЗмиЦсннн В памяти элсмспты ))втрнцы распОПЙГЙ10тся по строк Пример Определения матрицы с целочислсниым, элсыситами: тос пл)схтх ~ 51 ~)6); матрм)ц) нз 5 стьэок н )л) столбцов .1, ма)рица гаа . )".).х Опрс))елястся как Одно))ср))ы)1 массив . К,))смснтов, Кахслый из которых в свого Очередь является савом и,') 16 цсло 1ислсн)п 1х элементов. 1)рн Определении мсприцы так жс. как и 1)рн ЛР* ЛСЛС1 ГНИ ОДНОМСРЦОГО МЙССИВЙ ВОЗМ1)ЖНЙ ее ПОЛНая Или , сд)чиая нинциац)иэацня начальцыми эначсниями, при эп)к1 к~жлая строка матрицы инициао1иЗир)*'ется соотВстствуюгцнм ВЛОЯ1ЕИЦ) )М ПОДСП14СКОМ: ..7;,~,) 2- л с)Пока мптв))тцы Лосттп к элементам матрицы Равг).х ослцсствлястся с ПОМ01ЦЬК) ВЬ)рйЖСНИя Жй" 1: ЬХ 1). ); - 1, Где ' ~,, ГДС ) — БОМСР С11)ОКИ и ) — ИО))ср СТОлбцй мйтриць).