Нахождение подстроки в строке. Формирование нового символа с применением Blend-перехода

Важные заметки

Неизменяемость

В JavaScript строки являются неизменяемыми, так же говорят "immutable". Это означает, что какие бы вы к ним не применяли функции, они не производят in-place замены (то есть не производят изменения самой строки). Любые строковые функции, примененные к строкам, возвращают новую строку. Это верно и в том случае, когда мы обращаемся к конкретному символу в строке.

Const str = "hello"; str.toUpperCase(); // HELLO console.log(str); // hello str.toUpperCase(); // H console.log(str); // hello str = "W"; console.log(str); // hello

Лексикографический порядок

Лексикографический порядок - это, другими словами, алфавитный порядок. Такой порядок используется в словарях, телефонных справочниках, записных книжках и так далее.

В JavaScript вы можете сравнивать строки с помощью > и < , и сравнение будет происходить именно лексикографически.

Помните, "8" это не число, а строка.

Интерполяция

Кроме одиночных "" и двойных кавычек "" , современный JavaScript содержит обратные тики (backticks):

``

С обратными тиками вы можете использовать интерполяцию , вместо конкатенации. Вот, смотрите:

Const name = "Alex"; const a = 10; const b = 12; console.log(`His name was ${name} and his age was ${a + b}`);

Такой код выведет на экран His name was Alex and his age was 22 . Внутрь ${} вы можете поместить любое выражение.

Интерполяция предпочтительнее конкатенации . Мы советуем не использовать конкатенацию вообще. Вот некоторые из причин:

  • Такой код заставляет больше думать, потому что синтаксически + больше смахивает на сложение.
  • Из-за слабой типизации можно легко получить не тот результат. Конкатенация может породить ошибки.
  • Сложные строки при использовании конкатенации невозможно нормально разобрать в голове и понять, как они устроены.

Конспект урока

  • Строка - это последовательность символов
  • Пустая строка - это тоже строка (последовательность нуля символов)
  • Обозначается единичными или двойными кавычками

Создание строки с константой:

Const str1 = "Hello"; const str2 = "Hello";

Возможно включить кавычку одного типа внутрь строки, окружив её кавычками другого типа:

Const str1 = "They call him "Harry", and he likes it"; const str2 = "They call him "Harry", and he likes it";

Если в строке используются кавычки того же типа, они должны быть экранированы с помощью обратного слеша \ :

Const str1 = "They call her \"Ann\", and she likes it"; const str2 = "They call her \"Ann\", and she likes it";

Если строка включает обратный слеш (именно как символ, который хочется иметь в строке), он должен быть экранирован другим обратным слешем:

Const str = "This is a backslash \\ here" // This is a backslash \ here

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

Const str = "There is a tab \t and here \ncomes the new line!" // Here is a tab and here // comes the new line!

\t - это табуляция, \n это перенос на новую строку. Больше об экранировании (англ) .

Конкатенация строк

Строки могут склеиваться друг с другом. Такой процесс называется конкатенацией и задаётся символом + :

Const name = "Alex"; const age = 22; console.log("His name is " + name + " and his age is " + age); // His name is Alex and his age is 22

Строки будут склеены в том порядке, в котором они указаны: "mos" + "cow" → "moscow" , а "cow" + "mos" → "cowmos"

Доступ к индивидуальным символам

str[i] это i-ый символ строки str , начинающейся с 0. Например, "hexlet" это h , а "hexlet" это x .

Вот функция, которая принимает строку и возвращает копию этой строки без каждой второй буквы. Например, "hexlet" становится "hxe".

Const skip = (str) => < str.length) { result = result + str[i]; i = i + 2; } return result; }

str.length это длина str , то есть количество символов. Это просто количество, поэтому мы не начинаем отсчёт от 0. Например, "food".length это 4.

Транскрипт урока

Помните свою первую программу "hello, world"?

Console.log("Hello, World!");

Сейчас вы уже знаете, что здесь происходит вызов функции, а функция console.log принимает аргумент. В данном случае аргумент - не число, а "строка". Так мы называем фрагменты текста в программировании, потому что они как последовательность букв на веревке.

Строки есть везде. Сейчас я читаю сценарий, и текстовый файл - это длинная строка. Веб-сайт, на котором вы смотрите эти видео, содержит множество слов - всё это строки. Работа Google запоминать строки - в этом суть поиска. Файлы и папки в вашем компьютере идентифицируются через их названия, которые так же являются всего лишь строками.

Так же, как мы это делали с числами, мы можем создать константу из строки:

Const str = "Hello";

Вы можете использовать одиночные кавычки или двойные, не так важно, главное чтобы они были одинаковые и в начале и в конце строки.

Если вам необходимо использовать реальные кавычки внутри строки, тогда используйте другой знак для её создания. Например:

Const str = "They call him "Harry", and he likes it"; ///They call him "Harry", and he likes it

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

Const str = "They call him "Harry", and he likes it"; /// They call him "Harry", and he likes it

Двойные снаружи - одиночные внутри.

Но что делать, если такое невозможно, и вам нужно использовать одинаковый тип кавычек и для формулировки строки и внутри неё. Если вы попробуете сделать так

Const str = "They call him "Harry", and he likes it";

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

Нам нужно объяснить интерпретатору JavaScript, что некоторые кавычки он должен воспринимать иначе. Они не должны означать "начало строки" или "конец строки", они должны означать "символ кавычек".

Это называется "экранированием". Добавьте символ экранирования, обратный слеш \ перед символом, и символ "изолируется" от своей специфической роли и превратится в обычный знак в строке.

Const str = "They call him \"Harry\", and he likes it"; const str2 = "They call her \"Ann\", and she likes it"; // They call him "Harry", and he likes it // They call her "Ann", and she likes it

Этот символ экранирования может использоваться для вставления других специальных символов в строку.

Тут есть три момента.

Первый: если нам нужен обратный слеш в строке, то он должен быть экранирован другим обратным слешем.

Второе: обратный слеш-t это не "экранируемый t-символ": вам не нужно экранировать "t", "t" - это не специальный символ; вся конструкция обратный слеш-t - это специальная управляющая последовательность - она представляет собой единичную табуляцию, по сути - длинный пробел.

Третье: обратный слеш-n - это другая управляющая последовательность, которая представляет собой новую строчку. Считай, что вы нажмёте клавишу Enter, когда набираете текст. Поэтому, всё, что следует дальше, перейдет на новую строчку.

Теперь давайте попробуем написать функцию. Она будет принимать строку - имя и возвращать другую строку - приветствие. Вот как это должно работать:

Const result = greet("Sherlock"); // "Well hello, Sherlock"

Эта функция должна уметь каким-то образом принимать входящую строку и склеивать её с другой строкой. Такой процесс называется "конкатенацией" и в JavaScript он реализуется знаком плюс, как при сложении чисел:

Const greet = (str) => { return "Well hello, " + str; }

Теперь другой пример. Эта функция принимает строку и возвращает ту же строку, но без каждой второй буквы. Например, "California" становится "Clfri".

Const skip = (str) => { let i = 0; let result = ""; while (i < str.length) { result = result + str[i]; i = i + 2; } return result; }

Такие квадратные скобки позволяют нам получать индивидуальные символы из строки. Как и во многих процессах в программировании, вы начинаете отсчёт с 0, а не от 1. Поэтому первый символ str это str , второй - str , и так далее. Это число называется "индексом".

Функция skip принимает аргумент, создаёт две переменных - i для счётчика и result для итоговой строки. Счётчик - это 0, потому что нам нужно начать с первого символа, а result это пустая строка - мы будем добавлять символы к ней один за другим.

Затем следует цикл while, с условием, что "i меньше, чем длина строки". Длина означает "сколько символов". Длина строки "cats" - 4 - в ней 4 символа, 4 буквы.

Пока счётчик мешьше, чем длина, мы склеиваем или конкатенируем результирующую строку с символом по индексу i. Затем добавляем 2 к счётчику. Два, а не один, потому что нам нужно пропустить один символ.

В какой-то момент счетчик станет достаточно большим для того, чтобы условие цикла стало ложным, и функция вернёт result .

Давайте попробуем вызвать функцию с аргументом "cats":

Const skipped = skip("cats");

Длина "cats" - 4. Несмотря на то, что индексы начинаются с 0, длина - это действительное количество. "c" - не 0 букв, это одна буква. Поэтому длина "cats" - 4, но индекс его последней буквы - 3.

  1. 0 меньше четырёх, поэтому войти в цикл while
  2. конкатенировать строку с символом по индексу 0 - это "c"
  3. увеличить счётчик на 2
  4. 2 меньше 4, поэтому повторить
  5. конкатенировать строку с символом по индексу 2 - это "t". строка теперь стала "ct"
  6. увеличить счётчик на 2
  7. 4 не меньше 4, поэтому больше не повторять
  8. вернуть результат - "ct"

Вас ждут тест и практическое упражнение.

Мы продолжаем изучать символы, основное узнали, остальное доработается в процессе применения инструментов, управляющих символами, и создания иллюстраций с ними.

Но для творческих людей важны и психологические моменты. Мы на них постоянно опираемся, изучая очередной материал. Дошло время и до Робина Шармы . Читали вы этого автора, не читали, не это важно. Важно, что психологически выверенные положения стоит читать и перечитывать! Когда вы сами этим займетесь? В уме часто звучит ответ: «Никогда!»

А вместе мы всё обдумаем!

Итак, «у человека четыре творческих начала ».

«Как считает Робин Шарма , признанный мастер мотивации и автор мировых бестселлеров, у каждого человека есть 4 творческих начала , 4 созидающих источника , которые на 100% предопределяют все его жизненные результаты . И именно от них зависит то место, которое мы занимаем в жизни».

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

Мысли

«Каждая обдумываемая нами мысль определяет каждый отдельно взятый результат , который, в свою очередь, является отражением нашей мысли. Каждая привычка когда-то начиналась с мысли».
Если вы освоили Adobe Illustrator ,вышли на стоки, старайтесь мыслить только позитивно , несмотря ни на что! Хвалите себя и поддерживайте, успех придет, это проверено многими.
А то получаю письма с размышлениями, что на стоках упали продажи, значит, идти туда не стоит! Пишут люди, которые только осваивают программу. Не запугивайте себя. Может, вас стоки только и ждут! Никто ничего не знает, но не подпитывайтесь негативом!

Чувства

«Наши чувства также созидательны . Если мы чувствуем себя отлично, мы получаем отличные результаты. Если мы страстны, наша страсть будет передаваться другим. Если мы чувствуем себя ужасно, наши результаты будут далеки от выдающихся».
Радуйтесь каждому сделанному вами рисунку, каждой принятой работе, каждой продаже, каждому центу, упавшему вам в карман! Вспоминайте, что когда-то вы этого не имели, а сейчас дело пошло! Не забивайте радость творческого ребенка своими размышлениями о деньгах и продажах.

Слова

«Мы забываем, что слова обладают огромной силой . Слова способны созидать. Если вы что-то назовете трагедией, это предопределит вашу реакцию и всё последующее отношение».
Слова мы кому-то говорим или пишем. Так говорите и пишите о своих успехах. Разглядывайте успех даже в мелочах и не бойтесь преувеличивать. Это не хвастовство, не позерство, это привлечение в свою жизнь настоящего успеха.

Действия

«Каждые наши действия определяют конкретный результат . Чем сильнее развито это творческое начало в человеке, чем активнее и целенаправленнее мы действуем, тем к более выдающимся результатам мы приходим».
О действиях мы много говорили. Большое портфолио не свалится само вам на голову как манна небесная. Над ним надо работать, творить, придумывать, выискивать новое. Не надо из кожи вон лезть, но надо настроить себя на ежедневный кропотливый труд. А уж народные пословицы о труде вы знаете с детства. Их главная мысль – труд всегда вознаграждается!
Так что спасибо Робину Шарме за чудесное обобщение человеческих возможностей. Всё в наших руках!

В этом уроке продолжаем разговор о символах.

Вспомним, что символ в Adobe Illustrator – это графика, которая может применяться неограниченное количество раз в рисунке. Вы можете использовать символ столько раз, сколько вам необходимо, но если вы измените символ, то изменятся все образцы.

Над этим сегодня поработаем. Но для начала создадим свой символ. Мы на протяжении трех последних уроков пользовались символами из библиотеки. А в процессе творчества надо создавать свои символы. Символы можно создавать из любых объектов, включая контуры, фигуры с градиентной заливкой, с градиентной сеткой (меш) и группами объектов.

Итак, хороши наши осенние листики, созданные на последнем уроке, но давайте-ка их уберем, не мы их рисовали.

Листочки

Оставим название рисунка symbol4 , а экран вычистим. Заглянем в Adobe Bridge .


Рисунки школы иллюстратора

Сколько рисунков накопилось уже в нашей школе, начиная от самых примитивных, кончая законченными! Возьмем для будущего символа рисунок ribki 2 . Вот они, наши первые красавицы!

Рыбки

Выберем из них зеленую, заключим в габаритный прямоугольник с помощью черной стрелки Selection Tool (V), скопируем (Ctrl+C ) и вставим (Ctrl+V ) в рисунок symbol4


Выбранная рыбка

Рыбка большая, уменьшим её с помощью Shift для равномерного изменения и перетащим в пустое пространство панели Symbols (символы). Но сначала удалите ненужные там символы, оставшиеся от работы с прежним рисунком.
В диалоговом окне вставим название нового символа fish (рыба). И разберемся с тем, что есть в окне.

Окно параметры символа

В диалоговом окне Symbol Options (параметры символа) дается примечание, что в программе Illustrator нет отличий между типами символа Movie Clip (видеоролик) и Graphic (графика). Значит, не будем беспокоиться о значении параметра Export Type (тип).
Обратим внимание на Symbol Type (тип символа). По умолчанию стоит функция Dynamic Symbol (динамический символ). Эта функция позволяет символам сохранять общую форму, но внешний вид других образцов символа может динамически меняться. При изменении основной формы меняются и образцы символов, но другие изменения также сохраняются. Мы постоянно пользовались Dynamic Symbol (динамический символ). В палитре Symbols (символы) динамические символы отображаются с «+» в правом нижнем углу значка. И мы это не раз видели, теперь будем знать! Но при создании динамических символов не следует добавлять текст, размещенные изображения или объекты с сетками (меш). Запомним!
Static Symbol (статический символ) говорит сам за себя. Он не меняется.

Registration – точка регистрации символа обозначает начало координат для объекта определения символа. При создании символа мы можем выбрать одну из 8 точек регистрации на границах символа или точку в центре ограничительной рамки. Оставим всё как есть! Точка в центре.
Enable Guides for 9- Slice Scaling – включить направляющие для 9-фрагментного масштабирования. Будем знать, что такое есть. Здесь не так всё просто, надо серьезно разбираться!

У нас галочка по умолчанию стоит на другой записи.
Align to Pixel Grid – выровнять по пиксельной сетке. С этим мы тоже познакомимся, но не сейчас. Символы, выровненные по пиксельной сетке, остаются выровненными при перемещении их в пределах монтажной области, если их текущий размер не меняется. Оставим эту галочку, мы с ней работали.

ОК . В панели Symbols (символы) сразу появилась наша рыбка в качестве символа.

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


Палитра «Символы»

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

Палитра «Символы»

Удалим созданный символ из панели Symbols (символы). Но прежде выйдет такая табличка. Пройдем и этот этап. Удалять свои символы придется. Посмотрим, что нас ждет!


Предупреждающая табличка

One or more the symbols are in use and cannot be deleted until their instances are expanded or deleted . – Один или более символов используются и не могут быть удалены, пока их экземпляры не будут расширены или удалены.

Вот так, не сразу и удалишь ненужный символ! Если выберем Delete Instances (удалить экземпляры), исчезнет всё: и символ, и рыбка. Выбираем Expand Instances (развернуть экземпляры).


Выделенная рыбка

Рыбка выделилась красным, но символ из палитры исчез! Добились своего! Заглянем-ка в палитру Layers (слои). Вот это да!

Палитра «Слои»

Я раздвинула палитру, и видно, что рыбка наша разгруппировалась! Будем это знать!

Давайте-ка с помощью Ctrl + G объединим детали рыбки. Можете попробовать, но без объединения рыбка не перетаскивается в палитру.
Нам всё же надо создать новый символ. Вот тут зажмем и удержим клавишу Shift , пока перетаскиваем символ в палитру. Кроме того, если не нужно, чтобы при создании символа открывалось диалоговое окно New Symbol (новый символ), то, создавая символ, держите нажатой кнопку Alt . Illustrator присвоит символу имя по умолчанию, например, New Symbol 1 (новый символ1).

Потренируйтесь, и здесь не так всё просто!

Палитра «Символы»

Символ появился, а скопированную рыбку можно и удалить! Проблем не будет!

Теперь вытащим рыбку из панели Symbols (символы). Распылим и посмотрим, как всё работает! Почему бы не пробежаться по знакомым инструментам?! Тут вы уже специалисты! Начинайте! Инструмент Symbol Sprayer Tool (распылитель символов) и все стоящие за ним освоены на прошлых уроках!


Распыление символов

Мы когда-то руками перетаскивали рыбок, и это было долго, а теперь знаем, как быстрее сделать и без проблем. Да ещё и цвет, и прозрачность поменяли! Конечно, я не усердствовала особо, но рыбки разные. Знаю, что вы стараетесь! Молодцы!

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

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

Отредактировать символ можно, изменив соответствующий графический объект. Кроме того, можно переопределить символ, заменив его новым графическим объектом. При редактировании и переопределении символа изменяется его внешний вид в палитре Symbols (символы), а также вид всех его образцов в монтажной области.

Нам надо в этом убедиться, школа есть школа, она закладывает основы.
Выделим наши символы. Дважды кликнем по выделению в любом месте.


Размножаем набор символов

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

Синяя полоса вверху

Это и нужно! Возьмем клавишу Alt и размножим рыбок.
Кликнули, опять появился габаритный прямоугольник, зажали Alt и чуть оттащили новых рыбок в сторону.


Размноженные рыбки

Теперь уберем их с экрана, перетащив на холст. Все рыбки не нужны, воспользуемся только одной!


Рыбки на холсте

Мне приглянулась верхняя красная рыбка. Вы можете выбрать любую из своих. Но как её достать из набора символов? Сейчас узнаем!
Два раза кликнем в любом месте экрана, чтобы убралась синяя полоска сверху.


Убрали синюю полосу

Выделим новый набор рыбок. Передвинем поближе к выбранной рыбке палитру Symbols (символы), и посмотрим на одну из её функций. Работаем на холсте.


Разрываем связь символов

Break Link to Symbol – разорвать связь с символом. Кликнем на ней!
Все рыбки стали выделенными. Связь разорвалась!


Связь разорвалась

Они превратились в отдельные объекты. Но рыбки были единством, не забывайте! Снимем выделение, разгруппируем набор выделенных рыбок, выберем одну, которая нужна, остальные удалим.

Выбранная рыбка

У нас осталась одна рыбка! Развернем её и что-то в ней изменим, перетащив на экран с холста.

Набор символов и отдельная рыбка

Рыбки в наборе не мешают. Они все вместе! Будем изменять эту рыбку. Вернем ей нормальные глаза. Опять воспользуемся новым приемом! Выделите рыбку, дважды щелкните по экрану, она станет еле видимой, теперь выделяйте глаз и спокойно меняйте его цвет. Удобно и быстро. Режим изоляции включается, если есть вверху синяя полоса!


Режим изоляции

Дважды щелкнем по экрану, рыбке вернулся цвет. И глаз стал другой!


У рыбки новый глаз

Очень нужный прием, сегодня им ещё воспользуемся. Он помогает не только при работе с символами, но и другими объектами.

Мы о нем вскользь упоминали при изучении цвета. Но только вскользь. Пришло время поговорить о нем подробнее.
Режим изоляции (появление синей полосы на экране) изолирует группы и нижележащие слои, чтобы можно было легко выделять и изменять объекты и их части без разгруппирования. Не нужные в данный момент объекты становятся тусклыми и блокируются. Мы свободно можем изменять только выделенные объекты. Вы сами это проделали с глазом рыбки.
Для перехода в режим изоляции надо выделить объект черной стрелкой Selection Tool (V) и нажать кнопку Isolate Selected Object (изолировать выбранный объект) на панели Control (управление). Это ещё один способ, как войти в режим.


Кнопка режима изоляции

Этот значок на панели Control (управление) говорит о включении данного режима. Я пока на него не нажала! Рассмотрим поближе!

Кнопка режима изоляции

Кликнем на нем и посмотрим.


Режим изоляции и палитра «Слои»

Режим изоляции включен, в панели Layers (слои) мы это видим. Рыбка сгруппирована, а я легко выделила её туловище, с которым хочу поработать. Набор рыбок обесцвечен, они изолированы.
Можно и не включать палитру Layers (слои). Программа Adobe Illustrator CC не в одном месте предупреждает нас, что сделали. Надо только знать места!


Серая панель режима изоляции

В верхней части окна документа на серой панели написано Layer 1 (слой1) и < Group > (группа). Программа показывает нам, что мы изолировали группу объектов, расположенную на слое Layer 1 (слой1). Выйти из режима изоляции можно, кликнув два раза вне объектов.
Если внимательно смотрите, то замечаете, что на серой панели все четко отмечается, что вы изолируете. Но в данный момент у меня рыбка не обесцветилась. Не переживайте, бывает и так! Будем знать! Своё мы сделаем, всё получится без разгруппирования! Режим работает!


Режим изоляции

Я хочу изменить хвост рыбки. Начинаю изменения!


Измененный хвост рыбки

Карандашом Pencil Tool (N) и сглаживанием Smooth Tool сделала новый хвост рыбке. Я не особо старалась, у вас все лучше, но образец есть! Теперь «косточки» не подходят, попытаемся и с ними что-то сделать, не выходя из режима изоляции.

Измененные «косточки» хвоста

Я скопировала «косточки», развернула, подогнала под новый хвост и у нижней изменила цвет. Думаю, вы это сделали даже лучше. Все знакомо! Ничего не объясняю!

Посмотрим на нашу рыбку и выйдем из режима изоляции. Все рыбки сразу приобрели цвет!

Без режима изоляции

Вот и набор символов, и новая рыбка. Можно создать новый символ. Приступим!
Для начала уменьшим рыбку с помощью клавиши Shift , выделив её.


Набор символов и уменьшенная рыбка

Вот наш набор и в правом нижнем углу новая рыбка. Снова выделяем её, зажимая клавишу Shift , кликнем по значку New Symbol (новый символ), выйдет диалоговое окно Symbol Options (параметры символа), получим символ!


Создаем новый символ

Я не стала называть символ, программа дала своё название.
ОК .


Появился новый символ

Появился новый динамический символ! На рыбке плюса нет, её можно удалить! Но сдвинем её на холст, вдруг пригодится!


Распыление нового символа

Побаловаться мы любим! Кликнем новый символ, возьмем Symbol Sprayer Tool (распылитель символов) и посмотрим, что сделали!

Оторвались от души! Почему не порадоваться возможностям! Стая рыб за одно мгновение! Творческий ребенок в восторге!

Клавишей Delete удалим этот набор, переключившись на черную стрелку Selection Tool (V), создадим другой! Будем спокойнее, а то от радости хотели всю монтажную область заполонить новой рыбкой! Это просто и быстро!


Рыбки нового символа

Пусть будет как-то так! Вы вольны в своем размещении новых рыбок, не забывайте об изученных инструментах по управлению символами! Без них не обойтись! Всё знаете, я не повторяю!

Передвинем наш новый набор на уже имеющийся. Они не объединяются, это видно по палитре


Два набора символов

У нас два набора символов. Так просто их не объединить. Легче всего разорвать связь внутри наборов, разъединить их в группе, развернуть как надо, передвинуть, красиво распределить, а потом объединить и создать новый символ! Пробуем! Это вы умеете!


Создание третьего символа

Смотрим на палитру Layers (слои).


Новый символ в палитре «Слои»

В палитре один новый символ, кроме одинокой рыбки. Это не набор, это один символ! Сдвинем его на холст, где находится рыбка, очистим монтажную область.


Новый символ и рыбка на холсте

Удалить всегда успеем. Так много всего, а это два объекта. Выделен символ и не выделена рыбка.
Монтажная область чиста! А теперь вернемся в урок № 58 , я процитирую фрагмент из него:

«Бывают ситуации, когда после создания набора символов необходимо добавить еще немного других, следует выделить эту группу, активизировать инструмент Symbol Sprayer (распыление символов) и снова начать «распылять» символы. Они все объединятся в единое целое».

На чистой монтажной области этим и займемся! Вы все знаете, действуйте самостоятельно!


Распыление символов

Вот и новый набор символов Symbol Set . Его можно редактировать, но это на ваше усмотрение. Новый символ, что на холсте, очень тяжёлый, я не буду его распылять. А вы решайте сами.
Просто вытащу на монтажную область с холста и символ, и рыбку. В палитре Layers (слои) всё останется так же, а на экране иначе. Но мы разбираемся!


Палитры «Символы» и «Слои» на монтажной области

Одинокую рыбку я увеличила. Пусть будет видна!

А теперь включу ещё один режим, мы им тоже когда-то пользовались.

Режим «Контуры»

Это режим Outline (контуры). Он открывается на панели меню, View Outline (просмотр – контуры). И что видим? Как-то пусто!

На экране контуры увеличенной одинокой рыбки и контуры нового символа. От объединенного набора только рамка! Вот что такое символы! Они не перегружают рисунок! Использовать их стоит.
Вернемся обратно. View Preview (просмотр – иллюстрация).

С использованием горячих клавиш проще: Ctrl + Y . Пробуйте!


Экран в обычном режиме

У меня получился не особый «шедевр», но закончим. Знаю, что у вас красивее! Вы всегда молодцы! Горжусь!
Не очень устали! Навыки отработаны!

Но достаточно! Отдыхаем! Перемена!
Сохраните нарисованное, закрепите изученное!


Эта страница была показана 1342 раза.

Работа с текстовыми данными предполагает использование типов данных CHAR или STRING соответствующей длины. Для обработки данных этого типа в языках предлагается, кроме обычных операций, набор функций и процедур существенно сокращающих записи операций типа поиска символа в строке- POS(s1,s), вставки символа Insert(s1,s,n), удаление символа Delete(s,n,m), копирование символа строки Copy(s,n,m), определение длины строки Length(s), слияние строк- конктенация Concat(s1,s2,...,sn).

1.2.1. Вводится некоторое количество строк. В каждой строке - последовательность слов, разделенных хотя бы одним пробелом. Расположить в каждой строке слова по возрастанию их длины.

1.2.2. Дана строка, длиной не более 80 символов. Подсчитать количество повторений каждой встречающейся в строке буквы. Напечатать результат обработки в форме:

< буква > < количество повторений > < исходная строка>

1.2.3. Дана строка символов А. Удалить из строки все повторяющиеся символы, вывести исходную строку и результат обработки.

1.2.4. Дана строка из N букв. Разбить строку по m букв. Вывести исходную строку и результат обработки строки.

1.2.5. Дана строка из N букв. Разбить строку на K слов, в каждом из которых не более m букв. Вывести исходную строку и результат обработки строки.

1.2.6. Дана последовательность из строк с сообщениями: город, время вылета самолета, время в пути. Написать программу упорядочивания сообщений по времени в пути. Вывести исходные данные и результат обработки.

1.2.7. Дана последовательность слов в виде некоторого текста. К каждому слогу в словах текста добавить по новому слогу -”NO”. Слова в исходном тексте разделяются, по крайней мере, хотя бы одним пробелом. Вывести исходный текст и результат обработки текста.

1.2.8. Дан текст из некоторого количества предложений. Предложения разделяются знаком “;”. Разделить текст на отдельные предложения по этому знаку. Вывести исходный текст и результат обработки текста.

1.2.9. Дана строка из неизвестного заранее количества букв. Упорядочить все символы в строке по алфавиту. Вывести исходную строку и результат обработки строки.



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

1.2.11. Вводится произвольное количество строк. Определить сколько раз в каждой строке повторяются одинаковые буквы. Вывести исходные строки и результат обработки строк.

1.2.12. Вводится произвольный текст из неизвестного количества строк. Разделить текст на строки и упорядочить по 1-ой букве строки. Конец каждой строки может быть любым из символов “. , ;”. Вывести исходный текст и результат обработки.

1.2.13. “Это я знаю и помню прекрасно пи многие знаки мне лишни напрасны”. Ввести фразу и напечатать полученное значение числа p. Проверить работоспособность программы на любом произвольном тексте. Вывести исходный текст и результат вычислений.

1.2.14. Дан текст из слов, разделенных пробелами. Выделить из текста слова, состоящие их 4, 5, 6 букв. Напечатать исходный текст и результат его обработки.

1.2.15. Дана строка из неизвестного количества символов. Исключить из последовательности K-ый элемент, сжать строку. Вставить за M-ым элементом новый элемент. Количество удалений и вставок - любое. Вывести исходную строку и все результаты преобразований.

1.2.16. Задан текст из латинских букв. Вывести в алфавитном порядке все буквы, которые встречаются в тексте только один раз. Вывод исходного текста обязателен.

1.2.17. Дан текст из K символов. Преобразовать текст, заменив все не одиночные пробелы одним пробелом, все точки - точкой с запятой, все многоточия - одной точкой. Вывести исходный текст и результат обработки текста.

1.2.18. Вводится последовательность строк. Определить для каждой строки количество слов разной длины. Например,

в i -ой строке 5 слов длины 4 буквы

3 слова длины 8 букв и т. д.

Вывести на экран исходный текст и результат его обработки.

1.2.19. Вводится некоторая произвольная фраза на английском языке. Выделить из фразы две последовательности: гласных и согласных букв. Вывести исходный текст и результат его обработки.

1.2.20. Вводится текст, разбитый на две строки знаком “;”. Удалить из этой пары строк все повторяющиеся символы, общие для этой пары строк.. Вывести на экран исходный текст и результат его преобразования.

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

1.2.22. Вводится произвольный текст из некоторого количества строк. Обеспечить выравнивание текста по количеству символов в строке за счет размещения дополнительных пробелов в строках. Количество символов в строке перед каждой операцией выравнивания задается с клавиатуры. Вывести исходный текст и результат его обработки.

1.2.23. Вводится произвольный текст, разбитый на строки знаком” ; “. Слова в строке разделены, по крайней мере, одним пробелом. Выделить в каждой строке слова в которых: а) первые буквы слов совпадают; б) длина слова - наибольшая в строке. Вывести исходный текст и результат его обработки.

1.2.24. Каждая строка текста содержит цифры десятичной системы счисления и символы - знаки “+” или “- “. Строка заканчивается знаком “=“, пробелы в строке должны игнорироваться. Получить арифметическое значение вводимого выражения. Пример: 9+5-3=11.Вывести исходный текст и результат его обработки.

1.2.25. Вводится некоторая последовательность строк. В каждой строке слова переставить в обратном порядке. Пример: fdc, ads, 2.5cx, hjkl. преобразуется в hjkl, 2.5cx, ads,fdc. Вывести исходный текст и результат его обработки.

1.2.26. Дана строка из произвольного количества символов. Выделить из строки подстроки из букв, цифр и прочих символов. Вывести исходную строку и результат обработки.

1.2.27. Дана строка из английских слов. Выделить из строки подстроки из согласных букв, у которых и справа и слева стоят гласные буквы. Вывести исходную строку и результат ее обработки.

1.2.28. Дана строка длиной не более 80 символов. Строка представляет из себя запись некоторой математической формулы. Проверить правильность записи формулы по открывающим “(” и закрывающим скобкам “)”.

1.2.29. Дана строка из некоторого количества слов. Слова разделены в строке знаками “, ”, “ пробел”. Вставить произвольное новое слово в строку за i -ым словом. Вывести исходную строку и результат ее преобразования.

1.2.30. Вводится строка произвольной длины. Определить количество одинаковых подряд стоящих символов. Вывести исходную строку и результат обработки строки.

1.2.31. Заданная строка символов должна быть преобразована вычеркиванием всех символов, стоящих до первой точки в строке и после последней точки с запятой.

Символ

Символ – это один знак. Любой – буква, цифра, арифметический знак или пробел , знак препинания или подчеркивания... А также специальные символы – переход на новую строку, BackSpace, знак доллара или процент . Тип "символ" в Delphi обозначается Char:

ShowMessage("Вы ввели " + c);

ShowMessage("Переход на новую" + c + "строку");

Мы уже говорили, что символы берутся из таблицы символов ANSI или UNICODE. Большинство символов используются, некоторые символы являются служебными. Обратите внимание, что большая буква "А" и маленькая "а" - это разные символы! Также разными символами являются латинская "с" и русская "с", хотя они похожи, как две капли воды.

Нулевой символ не используется, он зарезервирован как полный нуль. Программисты нашли достойное применение этому символу, используя его в событиях ввода текста, когда требуется запретить пользователю ввод каких-либо символов. Служебные символы мы не можем увидеть в текстовом поле . Служебные символы, это , <Enter >, <Tab > и другие. Каждый символ обрабатывается компьютером как число от 0 до 255, таким образом, слово "ПРИВЕТ" в памяти машины будет выглядеть как набор цифр: "207 208 200 194 197 210".

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

В практике часто приходится обрабатывать отдельные символы. Переменным символьного типа Char можно присваивать значения таким образом:

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

if b > c then ShowMessage("Истина!")

else ShowMessage("Ложь!");

При работе с символьными переменными часто используют функции Chr() и Ord(). Функция Chr() принимает в качестве параметра число, и возвращает символ, который соответствует этому числу в таблице ANSI :

function Chr (X: Byte): Char;

Функция Ord() совершает прямо противоположное действие, она принимает в качестве параметра символ, и возвращает число, под которым этот символ хранится в таблице ANSI :

function Ord (C: Char): Byte;

Символьные переменные можно использовать с этими функциями:

В первой строке в переменную a мы записали символ "И", которому в таблице символов соответствует номер 200. Во вторую, целую переменную, мы записали число 200, так как символ с этим номером был записан в переменную a, которую мы передали в качестве параметра. Наконец, в третьей строке мы в целую переменную записали число 102, этот номер соответствует символу "f".


Строка

Строка – это набор символов. Строку можно представить в виде статичного или динамичного массива символьных данных. Типы строк мы уже разбирали в "Управляющая конструкция if, цикл for" : AnsiString – строка из ANSI – символов, и WideString – строка из UNICODE – символов.

Тип String не является отдельным типом, по умолчанию он равен AnsiString. Однако его можно перенастроить и наWideString , хотя в этом нет необходимости. Поэтому смело указывайте строковые переменные, как String:

s:= "Это многострочная" + #13 + "строка";

Как видно из примера, строку можно составлять из нескольких подстрок, и даже добавлять в нее отдельные символы. В примере мы добавили символ под номером 13, это символ перехода на новую строку. В результате выполнения этого кода процедураShowMessage() выведет на экран сообщение, разбитое на две строки:

Это многострочная

ShortString – короткая строка из ANSI – символов. Может содержать от 0 до 255 символов. Используется нечасто. Собственно, вы можете объявить тип String с заранее указанным размером:

Как видите, строка объявляется с числовым индексом, почти как массив . Собственно, строка символов и есть массив символьных данных, и обращаться с ней можно также. Индексация символов в строке начинается с единицы, то есть, индексу 1 соответствует 1-й символ строки.

stroka:= "Привет";

stroka := "а"; //изменили 5-й символ строки

ShowMessage(stroka); //результат: строка "Приват"

Это тоже строка, и в будущем нам придется с ней сталкиваться. Эта строка работает совершенно иначе, чем String. СтрокаString представляет собой массив символов, в нулевом элементе которого содержится количество байт , отводимых под эту строку. А переменная типа PChar – это не сама строка, а указатель на начало строки, то есть переменная указывает на первый символ строки в памяти компьютера. А где же тогда PChar хранит количество байт в строке?! А нигде! Мы уже говорили о таблице символов ANSI , и выяснили, что нулевой символ – пустой. Вот последний символ PChar как раз и хранит этот символ, икомпьютер , найдя его, считает, что строка окончена.

Со строками PChar работать очень неудобно, однако нам придется это делать, когда мы будем работать с функциями WinAPIнапрямую. Функции WinAPI – это функции самой Windows , а не Delphi. Однако Delphi позволяет использовать их. Иногда это бывает необходимо, например, когда средств Delphi недостаточно для выполнения намеченной задачи. Использование таких функций не всегда удобно, однако они выполняются процессором намного быстрее, так как содержатся в самой операционной системе. Пример – функция MessageBox().

Вы уже привыкли выводить сообщения с помощью функции Delphi ShowMessage()? Привыкайте к новой функции!

Application.MessageBox("строка 1", "строка 2",[ кнопки + тип_окна]);

· строка 1 - выводит текст внутри окна.

· строка 2 – текст в заголовке окна.

Если не указывать [кнопки + тип_окна] то выйдет простое окно с кнопкой ОК, как в функции ShowMessage().

Министерство образования и науки Российской Федерации

Федеральное агентство по образованию

Саратовский государственный технический университет

Балаковский институт техники, технологии и управления

Работа с символами и строками в языке программирования си

Методические указания к выполнению лабораторной работы по курсу «Логическое программирование» для студентов специальности 071900 дневной формы обучения

Одобрено

редакционно-издательским советом

Балаковского института техники,

технологии и управления

Балаково 2009

ЦЕЛЬ РАБОТЫ : познакомиться с понятиями символьной, строковой переменной, строковой константы, указателя на строки, научиться выполнять операции ввода/вывода строк, определять специфику работы со строковыми функциями.

1. Общие понятия

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

1.1. Символьные переменные

Любой текст состоит из символов. Для хранения одного символа предназначен тип данных char . Переменную типа char можно рассматривать двояко:

    как целое число, занимающее 1 байт и способное принимать значения:

    • от 0 до 255 (тип unsigned char );

      от -128 до 127 (тип signed char );

    как один текстовый символ.

Сам же тип char может оказаться как знаковым, так и беззнаковым, в зависимости от операционной системы и компилятора. Поэтому использовать тип char не рекомендуется, лучше явно указывать, будет ли он знаковым (signed ) или беззнаковым (unsigned ).

Как и целые числа, данные типа char можно складывать, вычитать, умножать, делить, а можно выводить на экран в виде одного символа.

Если нужно вывести числовое значение символа, также называемое ASCII-кодом, то значение символа необходимо преобразовать к типу int . Например:

#include

using namespace std;

unsigned char c="A"; // Константы char заключаются в одинарные кавычки

cout<

c=126; // char можно присвоить и числовое значение

cout<

В этом примере переменной с типа char присваивается значение, равное символу "A" (константы типа char записываются как символы в одинарных кавычках), затем на экран выводится значение c как символа и его ASCII-код, потом переменной c присваивается значение 126, то есть символ с ASCII-кодом 126 и снова выводится на экран символ и его ASCII-код.

1.2. Строковые переменные и константы

Текстовую строку можно представить, как массив символов типа char , но в языке СИ для хранения текстовых строк был создан более удобный тип string .

Строковые переменные используются для хранения последовательности символов.

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

где s рассматривается как массив с элементами символьного типа, который может содержать до 14 элементов. Предположим, что s присваивается строковая константа:

Я ПРОГРАММИСТ!

Строковая константа – это последовательность символов, заключенная в кавычки. Каждый символ строки хранится как элемент массива. В памяти строка хранится следующим образом:

Символ ‘\0’ нуль (null) – символ автоматически добавляется к внутрисистемному представлению строки для того, чтобы в программе можно было определить конец строки. Таким образом, при описании строковой переменной следует предусматривать один дополнительный элемент для завершающего нуль-символа.

Строки также могут вписываться в память и считываться при помощи символьных указателей. Символьный указатель на строку объявляется следующим образом: char *pstr = ЗДРАВСТВУЙ,

где pstr это указатель, который инициализирован ссылкой на строковую константу. Указатель может быть изменен так, что он будет указывать на какой-либо другой адрес, но при этом строка, на которую изначально ссылался указатель, может стать недоступной.