Русские документы
RSS rusdoc.ru  Найти :
Последние поступления
  Hardware:
Видеоустройства
Системные платы
Процессоры
Мобильные устройства
Аудиосистема
Охлаждение системы
Накопители информации
КПК и ноутбуки
Телефоны и связь
Периферия
Система
Сети
Разные устройства
 
  Programming:
Web-разработка
Языки программирования
Технологии и теория
Разработка игр
Программная инженерия
 
  Software:
Операционные системы
Windows 7
Базы данных
Обзоры программ
Графика и дизайн
   
  Life:
Компьютерная жизнь
Разные материалы
   
Партнеры
Публикация
Правовая информация
Реклама на сайте
Обратная связь
Экспорт в RSS Экспорт в RSS2.0
   

"Паскалевские" операторы (Часть 1 - "Работа со строками")

Автор: WEC (бывший волшебник)
Оригинал: http://www.noil.pri.ee

Часть первая

«Работа со строками»

Я часто видел, что те кто сразу начинал программировать с Дельфи, а не с Паскаля, долгое время не знают о многих хороших функциях и процедурах, которые знают, те кто начал изучать именно с Паскаля… А там есть хорошие функции нужные для программирования для Дельфийцев).

В этой части я расскажу о функциях и процедурах для работы со строками…

Я не буду здесь рассказывать, что такое строки и какие допускаются операции над переменными такого типа… Сразу перейдём к делу(скобки [...] означают необязательные параметры):


*********************************************************************************************
Length (str) – функция определения длины строки str; Где str – это переменная строкового типа.
Например:
Var
str: string;
DL: integer;
begin
str:= 'Салют!!!';
DL:= Length(str);
{Теперь в DL будет храниться число 8, так как слово «Салют!!!» состоит из 8 символов}
end;
*********************************************************************************************
Delete (str, index, count) – процедура удаления count символов из строки str, начиная с символа с номером index.
Например, строка St='Она не пробовала' после процедуры Delete (St, 4, 3) преобразуется в строку St='Она пробовала';
Например:
Var
St: string;
Begin
St:= 'Она не пробовала';
Delete (St, 4, 3);
{Теперь в переменной St храниться строка «Она пробовала»}
End;
*********************************************************************************************
Insert (substr, str, index) – процедура вставляет подстроку substr в строку str, начиная с символа с номером index.
Например, строка St='один три' после процедуры Insert(' два', St, 5) преобразуется в строку St='один два три';
Например:
Var
St: string;
Begin
St:= 'один три ';
Insert(' два', St, 5);
{Теперь в переменной St храниться строка «один два три»}
End;
*********************************************************************************************
Concat (s1[, s2,.., sn]) – функция сцепления строк s1, s2,.., sn;
Например:
Var
S1,S2,S3,St: string;
Begin
S1:= 'один ';
S2:= 'два ';
S3:= 'три';
St:= Concat(S1, S2);
{Теперь в переменной St храниться строка «один два три»}
End;
*********************************************************************************************
Copy (str, index, count) – функция копирования из строки str, count символов, начиная с символа с номером index.
Например, из строки S='один два три' после выполнения оператора “St:=Copy(S,6,3);” копируется строка St='два';
Например:
Var
S,St: string;
Begin
S:= 'один два три';
St:= Copy(S, 6, 3);
{Теперь в переменной St храниться строка «два»}
End;
*********************************************************************************************
Pos (substr, str) – функция возвращает номер позиции в строке str, с которой начинается первое вхождение подстроки substr, если подстрока не найдена, то возвращается ноль.
Например, если St1='один два три', а St2='два', то после выполнения оператора “K:=Pos(St2, St1);” получим значение K=6.
Например:
Var
St1,St2: string;
K: Integer;
Begin
St1:= 'один два три';
St2:= 'два';
K:= Pos(St2, St1);
{Теперь в переменной K храниться число 6}
End;
*********************************************************************************************
PosEx (substr, str, x) – функция возвращает номер позиции в строке str, с которой начинается первое вхождение подстроки substr, но поиск идет, начиная с символа, под номером x в str. Если подстрока не найдена, то возвращается ноль.
Например, если St1='один два один два три', а St2='два', то после выполнения оператора “K:=PosEx(St2,St1,9);” получим значение K=15.
Например:
Var
St1,St2: string;
K1,K2: Integer;
Begin
St1:= 'один два один два три';
St2:= 'два';
K1:= PosEx(St2, St1, 1);
K2:= PosEx(St2, St1, 7);
{Теперь в переменной K1 храниться число 6, а в K2 храниться число 15}
End;
*********************************************************************************************

Существуют такие функции как StrToFloat и FloatToStr . Первая функция преобразует строку в которой записаны числа в настояшие числа. Вторая функция делает противоположное преобразование.
Но однажды я столкнулся с интересной вещью… При тестировании одной из моих программ на разных компьютерах с разными операционными системами Windows, я обнаружил на некоторых ошибку связанную с функцией StrToFloat . Например, на одном компе с Windows 2000 нет этой ошибки, а на другом с этой же операционкой есть… Ошибка заключалась в том, что эта функция на разных компах воспринимала разный знак разделения числа на целое и дробное, или «.» , или «,» . Но ведь такая ошибка не допустима если Вы делаете программу на продажу… Это будет означать, что у кого-то Ваша прога будет работать, а у кого-то нет. Для решения этой проблемы, как один из вариантов, я могу предложить отказаться от этих двух функций и использовать их следующие аналоги:



*********************************************************************************************
(аналог функции StrToFloat):
Val (str, x, code) – процедура преобразования строки str в целое или вещественное число, сохраняющееся в переменной x, целочисленный параметр code равен нулю, если преобразование прошло успешно, в противном случае в code запишется номер позиции в строке str, где обнаружен ошибочный (нечисловой) символ; для этой процедуры знак разделения числа всегда знак «.»;
Например:
Var
S: string;
X: Extended;
code: integer;
Begin
S:= '2.5';
Val(S, X, code);
{Теперь в переменной X храниться число 2.5}
End;
*********************************************************************************************
(аналог функции FloatToStr):
Str (x [: width[: decimals]], stroka) – процедура преобразования числа x вещественного или целого типа в строку символов stroka, параметры width и decimals задают формат преобразования.
Например, если x – число вещественного типа, то процедура Str(x:6:4,Strx) преобразует его в строку, скажем, Strx='8.5671'. Если число n=-34 – целого типа, то Str(n:6, Sn) даст строку длинной в шесть символов Sn=' -34' ;
Например:
Var
S: string;
X: integer;
Begin
X:= 2005;
Str(X, S);
{Теперь в переменной S храниться строка «2005»}
End;
*********************************************************************************************

Следующие функции работают с типом CHAR и отдельными символами строки:



*********************************************************************************************
UpCase (ch) – функция перевода строчного латинского символа ch в соответствующую ему заглавную букву, любой другой символ возвращается без преобразования;
*********************************************************************************************
Chr (b) – функция преобразования величины b типа BYTE в символ. Например, в соответствии с кодом ASCII, оператор “ch1:=Chr(97);” (ch1 – переменная символьного типа CHAR) вернет латинский символ "a".
*********************************************************************************************
Ord (x) – функция обратного преобразования, которая применима ко всем порядковым типам. При применении к символам она возвращает их ASCII-код. Так, оператор “k:=Ord('b');” возвращает значение k=98.
*********************************************************************************************

В следующем фрагменте программы показаны способы определения количества символов в вводимой строке S:


Var
DL1, DL2: Byte;
S: String;
Begin
S:= ‘Дельфи';
DL1:=Length(S);
DL2:= Ord(S[0]);
{Теперь в переменной DL1 и DL2 хранится число равное длинне строки S(кол-ву символов), а то есть число 6}
{Замете, операции, проделанные над переменными DL1 и DL2, аналогичны ! Это тоже самое}
End;

Управляющие коды и символы можно вводить с помощью префикса #. Так, строку 'abba' можно записать как #97#98#98#97. Допускается вставка в строку символов управляющих кодов, например, 'Bottom'#10#13'Top'#7.





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



Задания на работу со строками

Дана строка длиной n символов, содержащая слова, т.е. группы символов, разделенные пробелами и другими разделителями и не содержащие пробелов внутри себя:


  1. Вывести все слова строки в алфавитном порядке.
  2. Вывести все слова, отличные от последнего слова, предварительно преобразовав их по следующему правилу: удалить из каждого слова все последующие вхождения первой его буквы.
  3. Вывести те слова строки, которые отличны от последнего слова и совпадают с начальным отрезком латинского алфавита (a, ab, abc и т. д.). В каждом слове от 1 до 8 литер.
  4. Вывести те слова, которые отличаются от последнего слова и удовлетворяют условию, что в слове нет повторяющихся букв.
  5. Выделить в строке отдельные слова и вывести их «в столбик» по одному слову.
  6. Дан текст, в словах которого могут встречаться цифры и знаки "+", "-", "*", "/". Если с обоих сторон от знака расположены буквы, то каждый знак "+", заменить цифрой "1", знак "-" заменить цифрой "2", знак "*" заменить цифрой "3", а знак "/" - цифрой "4". Иначе оставить текст без изменений.
  7. Найти число слов, которые оканчиваются той же буквой, что и последнее слово. Вывести их на экран.
  8. Дана последовательность английских слов. В словах, которые оканчиваются сочетанием букв “ing”, заменить это окончание на “ed”.
  9. Вывести все слова, отличные от последнего слова, предварительно удалив из слов нечетной длины его среднюю букву.
  10. Дано натуральное число n (-1000 Ј n Ј 1000). Написать программу вывода такого числа в словесной форме («два», «семнадцать», «минус сорок пять», «сто двадцать два» и т.д.).
  11. Для каждого слова указать, сколько раз оно встречается среди всех слов данного текста.
  12. Заменить все малые буквы в русских словах одноименными большими.
  13. Известно, что в начале строки находится группа не более чем из 40 латинских букв, за которой следуют пробелы. Вывести эту строку, предварительно удалив все вхождения сочетания “th” (после удаления текст сомкнуть).
  14. Найти длину самого короткого слова.
  15. Найти и вывести все слова, начинающееся на букву "а".
  16. Найти слова, первый и последний символы которых совпадают, и вывести эти слова и их количество.
  17. Подсчитать количество букв "а" в каждом четном слове.
  18. Строка символов содержит, кроме букв и знаков, действительные числа (например, 'аЧв+0,973-1,1'). Получить строку, в которой в числах после запятой оставлены только две значащие цифры (т.е. 'аЧв+0,97-1,10')
  19. Строка содержит два действительных числа. Получить сумму этих чисел и записать в другую строковую переменную в виде выражения (например, 27,8 + 17,3 = 45,1).
  20. Удалить все символы в строке, не являющиеся буквами, а также заменить множественные пробелы на один.


===============================================================================
==============================================================
===================================
=================
=====


С уважением, WEC (бывший волшебник)

 

Реклама:


Последнее на сайте :
28.05.2015:
Нужен надежный хостинг с поддержкой php mysql?
Бесплатный конвертер для видео файлов
Немножко философский пост про то, как мы в глаза смотрели
Самые заметные проблемы облачных провайдеров за 2012 год
Распределительная сеть дата-центров мирового масштаба — сердце империи Google
Google выделяет миллионы долларов на новый конкурс по взлому Chrome
Top 5 раздражающих моментов в работе программиста
Глава мобильного подразделения Ubuntu Ричард Коллинз рассказал о планах
Обзор планшета Acer ICONIA W7. Windows 8 по-профессиональному
Как получить nano-sim для iPhone 5?



Реклама:





© Copyright 1998-2012 Александр Томов. All rights reserved.