<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=59312&amp;view=findpost&amp;p=422130</guid>
        <pubDate>Fri, 06 Aug 2004 08:57:21 +0000</pubDate>
        <title>Символы и Строки (Char &amp;amp; Strings)</title>
        <link>https://forum.sources.ru/index.php?showtopic=59312&amp;view=findpost&amp;p=422130</link>
        <description><![CDATA[Romtek: Функции модуля <strong class='tag-b'>Stringz.pas</strong><br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">Function LowCase (C:Char): Char; &nbsp;{ &#39;StRIng&#39; -&#62; &#39;string&#39; }</div><div class="code_line">Function RUpCase (Ch: Char): Char; &nbsp;{ &#39;я&#39; -&#62; &#39;Я&#39; }</div><div class="code_line">Function RLowCase (Ch:Char): Char; &nbsp;{ &#39;Я&#39; -&#62; &#39;я&#39; }</div><div class="code_line">Function RLowStr (S:String): String; &nbsp;{ &#39;Russian Язык&#39; -&#62; &#39;русский язык&#39; }</div><div class="code_line">Function RUpperStr (s:string): String; &nbsp;{ &#39;Russian Язык&#39; -&#62; &#39;RUSSIAN ЯЗЫК&#39; }</div><div class="code_line">Function UpStr (S:string): String; &nbsp;{ &#39;Pascal&#39; -&#62; &#39;PASCAL&#39; }</div><div class="code_line">Function LowStr (s:string): String; &nbsp;{ &#39;Turbo&#39; -&#62; &#39;turbo&#39; }</div><div class="code_line">Function ReplaceChar (S:String; OldChar,NewChar:char): String; &nbsp;{ Замена в строке S всех символов OldChar на NewChar }</div><div class="code_line">Function ReplaceAll (S:string;const Search,Repl:string): String; &nbsp;{ Замена в строке S всех вхождений Search на Repl }</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script><br>
<br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>А вы знаете что в DOS есть функции преобразования строки в верхний   и   нижний  регистры,<br>
 и  если  в  CONFIG.SYS   стоит COUNTRY=007, они корректно работают с русскими буквами.</div></div><br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">Function Upcase (C:Char): Char; assembler;</div><div class="code_line">asm</div><div class="code_line">&nbsp;&nbsp; mov AX,6520H</div><div class="code_line">&nbsp;&nbsp; mov DL,C</div><div class="code_line">&nbsp;&nbsp; int 21H</div><div class="code_line">&nbsp;&nbsp; mov AL,DL</div><div class="code_line">end;</div></ol></div></div></div></div><br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>А можно за один вызов перевести в верхний регистр целую строку<br>
String или PChar. Это подфункции 21H и 22H той же функции 65H<br>
Вариант для String приведу, а для PChar пишите сами - он проще.<br>
</div></div><div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">Procedure UpString (var S: String); assembler;</div><div class="code_line">asm</div><div class="code_line">&nbsp;Push DS</div><div class="code_line">&nbsp;LDS BX,S</div><div class="code_line">&nbsp;XOR CX,CX</div><div class="code_line">&nbsp;MOV CL,[BX] {;Длина строки в CX}</div><div class="code_line">&nbsp;INC BX</div><div class="code_line">&nbsp;MOV DX,BX {; DS:DX- указатель на первый символ}</div><div class="code_line">&nbsp;MOV AX,6521H</div><div class="code_line">&nbsp;INT 21H</div><div class="code_line">&nbsp;POP DS</div><div class="code_line">end;</div></ol></div></div></div></div><div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>Для подфункции 22H указатель на ASCIIZ строку передается в тех же DS:DX</div></div>]]></description>
        <author>Romtek</author>
        <category>Pascal: Структуры данных</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=59312&amp;view=findpost&amp;p=419166</guid>
        <pubDate>Tue, 03 Aug 2004 20:39:43 +0000</pubDate>
        <title>Символы и Строки (Char &amp;amp; Strings)</title>
        <link>https://forum.sources.ru/index.php?showtopic=59312&amp;view=findpost&amp;p=419166</link>
        <description><![CDATA[Romtek: <strong class='tag-b'><span class='tag-size' data-value='14' style='font-size:14pt;'><span class="tag-color tag-color-named" data-value="blue" style="color: blue">Лекция по теме &quot;Строки&quot; с примерами</span></span></strong> (Word document, 53 кб)<br>
<hr>Материал прислал <strong class='tag-b'>e-moe</strong>, за что ему спасибо.]]></description>
        <author>Romtek</author>
        <category>Pascal: Структуры данных</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=59312&amp;view=findpost&amp;p=395191</guid>
        <pubDate>Sun, 04 Jul 2004 21:05:21 +0000</pubDate>
        <title>Символы и Строки (Char &amp;amp; Strings)</title>
        <link>https://forum.sources.ru/index.php?showtopic=59312&amp;view=findpost&amp;p=395191</link>
        <description><![CDATA[Eiden: Продолженние строк. Наконец-то :)<br>
<br>
<span class='tag-u'><strong class='tag-b'>Операции над строками</strong></span><br>
<br>
<span class='tag-u'><em class='tag-i'>Получение длины строки:</em></span><br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">Function Length(S : String) : Integer; </div></ol></div></div></div></div><br>
Возвращает длину строки <strong class='tag-b'>S</strong>. Тоже самое можно получить, как было сказано выше, прочитав нулевой байт строки.<br>
Пример:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">Var </div><div class="code_line">&nbsp;I : Integer;</div><div class="code_line">&nbsp;S : String ;</div><div class="code_line">Begin</div><div class="code_line">&nbsp;S := &#39;12345&#39;;</div><div class="code_line">&nbsp;I := Length(S); &nbsp; &nbsp; &nbsp; &nbsp; { I теперь содержит 5 }</div><div class="code_line">&nbsp;I := byte(S[0]); &nbsp; &nbsp; &nbsp; &nbsp; { И все равно 5 :) }</div><div class="code_line">&nbsp;{V. S[0] имеет тип char, и нужно явное преобразование до байта.}</div><div class="code_line">End.</div></ol></div></div></div></div><br>
<br>
<span class='tag-u'><em class='tag-i'>Конкатенация (слияние) строк</em></span><br>
<br>
Чтобы &quot;склеить&quot;две строки достаточно просто применить к ним оператор &quot;+&quot;. <br>
Например:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">Var</div><div class="code_line">&nbsp;S1, S2, S3 : String;</div><div class="code_line">Begin</div><div class="code_line">&nbsp;S1 := &#39;Мама &#39;;</div><div class="code_line">&nbsp;S2 := &#39;мыла &#39;;</div><div class="code_line">&nbsp;S3 := S1 + S2;</div><div class="code_line">&nbsp;S3 := S3 + &#39;раму&#39;;</div><div class="code_line">&nbsp;WriteLn(S3); &nbsp;{ Выведет на экран &quot;Мама мыла раму&quot; }</div><div class="code_line">End.</div></ol></div></div></div></div><br>
<br>
На самом деле, оператор &quot;+&quot; - эквивалент функции <strong class='tag-b'>Concat</strong>:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">Function Concat(s1, [s2... sn] : String) : String;</div></ol></div></div></div></div><br>
Несложно догадаться, как она работает:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">Var</div><div class="code_line">&nbsp;S1, S2, S3 : String;</div><div class="code_line">Begin</div><div class="code_line">&nbsp;S1 := &#39;Мама &#39;;</div><div class="code_line">&nbsp;S2 := &#39;мыла &#39;;</div><div class="code_line">&nbsp;S3 := &#39;раму&#39;;</div><div class="code_line">&nbsp;WriteLn(Concat(S1, S2, S3)); { Выведет на экран все ту же бессмертную фразу }</div><div class="code_line">End.</div></ol></div></div></div></div><br>
<br>
<span class='tag-u'><em class='tag-i'>Получение части строки</em></span><br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">Function Copy(S : String; Index : Integer; Count : Integer) : String;</div></ol></div></div></div></div><br>
Возвращает строку, длиною <strong class='tag-b'>Count</strong> символов, вырезанную из строки <strong class='tag-b'>S</strong>, начиная с символа с номером <strong class='tag-b'>Index</strong>. <br>
Если <strong class='tag-b'>Index</strong> больше длины строки <strong class='tag-b'>S</strong>, эта функция вернет пустую строку.<br>
Если <strong class='tag-b'>Count</strong> больше, чем символов &quot;осталось&quot; в строке, то <strong class='tag-b'>Copy</strong> вернет только &quot;остаток&quot; строки (начиная с <strong class='tag-b'>Index</strong> символа).<br>
Пример:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">Var</div><div class="code_line">&nbsp;S, S2 : String;</div><div class="code_line">Begin</div><div class="code_line">&nbsp;S := &#39;Форум на Исходниках.РУ&#39;;</div><div class="code_line">&nbsp;S2 := Copy(S, 10, 13); { S2 теперь содержит &quot;Исходниках.РУ&quot; }</div><div class="code_line">End.</div></ol></div></div></div></div><br>
<br>
<span class='tag-u'><em class='tag-i'>Удаление подстроки</em></span><br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">Procedure Delete(Var S : String; Index : Integer; Count : Integer);</div></ol></div></div></div></div><br>
Эта процедура удаляет из строки<strong class='tag-b'> S Count </strong>байт, начиная с позиции <strong class='tag-b'>Index</strong>.<br>
Если <strong class='tag-b'>Index</strong> больше, чем длина строки, эта процедура ничего не делает.<br>
Если <strong class='tag-b'>Count </strong>больше, чем осталось символов в строке, <strong class='tag-b'>Delete </strong>удаляет все символы до конца строки.<br>
Использование:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">Var</div><div class="code_line">&nbsp;S : String;</div><div class="code_line">Begin</div><div class="code_line">&nbsp;S := &#39;Мама не мыла раму&#39;;</div><div class="code_line">&nbsp;Delete(S, 5, 3); { Удалить из строки S три символа, начиная с пятого. Теперь S равна &quot;Мама мыла раму&quot; }</div><div class="code_line">End.</div></ol></div></div></div></div><br>
<br>
<span class='tag-u'><em class='tag-i'>Вставка подстроки</em></span><br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">Procedure Insert(Source : String; &nbsp;Var S : String; Index : Integer);</div></ol></div></div></div></div><br>
Это процедура вставляет в строку <strong class='tag-b'>S </strong>подстроку <strong class='tag-b'>Source</strong>. Вставка производится с символа с номером <strong class='tag-b'>Index</strong>.<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">Var</div><div class="code_line">&nbsp;S : String;</div><div class="code_line">Begin</div><div class="code_line">&nbsp;S := &#39;Мама раму&#39;;</div><div class="code_line">&nbsp;Insert(&#39;мыла &#39;, S, 5); { ну думаю, совсем несложно догадаться... }</div><div class="code_line">End.</div></ol></div></div></div></div><br>
<br>
Примечание. При использовании Turbo Vision нужно часто использовать префикс <strong class='tag-b'>System</strong>, так как многие объекты имеют метод с именем <strong class='tag-b'>Insert</strong>. Например<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">System.Insert(params)</div></ol></div></div></div></div><br>
<span class='tag-u'><em class='tag-i'>Поиск подстроки</em></span><br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">Function Pos(Substr : String; S : String) : Byte;</div></ol></div></div></div></div><br>
<br>
Ищет подстроку <strong class='tag-b'>Substr </strong>в строке <strong class='tag-b'>S </strong>и возвращает позицию в строке, где найдено первое вхождение.<br>
Если подстрока не найдена, возвращает 0.<br>
Пример:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">Var</div><div class="code_line">&nbsp;S : String;</div><div class="code_line">Begin</div><div class="code_line">&nbsp;S := &#39;abacacb&#39;;</div><div class="code_line">&nbsp;WriteLn(Pos(&#39;ba&#39;, S)); { На экран будет выведено 2 }</div><div class="code_line">End.</div></ol></div></div></div></div>]]></description>
        <author>Eiden</author>
        <category>Pascal: Структуры данных</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=59312&amp;view=findpost&amp;p=334584</guid>
        <pubDate>Thu, 08 Apr 2004 22:49:18 +0000</pubDate>
        <title>Символы и Строки (Char &amp;amp; Strings)</title>
        <link>https://forum.sources.ru/index.php?showtopic=59312&amp;view=findpost&amp;p=334584</link>
        <description><![CDATA[Eiden: <div class='tag-align-center'><span class='tag-size' data-value='12' style='font-size:12pt;'><strong class='tag-b'><span class="tag-color tag-color-named" data-value="blue" style="color: blue">- Символы и Строки -</span></strong></span></div><br>
<span class='tag-u'><strong class='tag-b'>Теория:</strong></span><br>
<br>
Язык Турбо Паскаль поддерживает стандартный символьный тип <strong class='tag-b'>Сhar</strong> и, кроме того, строки, описываемые типом <strong class='tag-b'>String</strong> или <strong class='tag-b'>String[n]</strong>.<br>
<br>
Значение типа <strong class='tag-b'>Char</strong> - это символ из алфавита ЭВМ, заключенный в одинарные кавычки, например, &#39;A&#39;, &#39;7&#39;. Кроме этой классичекой записи существуют еще две. Одна из низ - представление символа его кодом ASCII с помощью префикса #:<br>
<br>
#97 = Chr(97) = &#39;a&#39; (символ &#39;a&#39;)<br>
#0 = Chr(0)         (нулевой символ) <br>
#32 = Chr(32) = &#39; &#39; (пробел)<br>
<br>
Символы, имеющие коды от 1 до 31 (управляющие), могут быть представлены их &quot;клавиатурными&quot; обозначениями - значком &quot;^&quot; и буквой алфавита (для диапазона кодов 1..26) или управляющим символом (для диапазона 27..31):<br>
<br>
^A = #1 = Chr(1) - код 1<br>
^B = #2 = Chr(2) - код 2<br>
...<br>
^Z = #26 = Chr(26) - код 26<br>
^[ = #27 = Chr(27) - код 27<br>
...<br>
^_ = #33 = Chr(33) - код 33<br>
<br>
Рассмотрим более подробно строковый тип. Максимальный длина строки составляет 255 символов. Строки называются динамическими, поскольку могут иметь различные длины в пределах объявленных границ. Например, введя переменные <br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">Var</div><div class="code_line">&nbsp;S32 &nbsp;: String[32];</div><div class="code_line">&nbsp;S255 : String[255];</div></ol></div></div></div></div><br>
мы может в S32 строчные значения, длиной не более 32 символов, а в S255 - не более 255. Описание <strong class='tag-b'>String</strong> без указания длины отводит место, как и описание <strong class='tag-b'>String[255]</strong>.<br>
При попытке записать в переменную строку длиннее, чем было объявлено в описании, &quot;лишняя&quot; часть будет отсечена. Можно присваивать и пустые строки. Их обозначение &#39;&#39; (две одинарных кавычки подряд).<br>
<br>
Значением строки может быть любая последовательность символов, заключенных в одинарные кавычки:<br>
&#39;abcde&#39;<br>
&#39;123332&#39;<br>
&#39;       &#39;<br>
&#39;&#39;<br>
&#39;&#39;&#39;&#39;<br>
Последняя конструкция есть строка из одной одинарной кавычки. <br>
<br>
Можно, вообще говоря, рассматривать строки как массивы символов. Любой символ из строки можно изъять по его номеру:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">Var</div><div class="code_line">&nbsp;I : Byte &nbsp; &nbsp; &nbsp;;</div><div class="code_line">&nbsp;S : String[20];</div><div class="code_line">Begin</div><div class="code_line">&nbsp;S := &#39;Это Массив символов&#39;;</div><div class="code_line">&nbsp;For I := 1 to 20 do </div><div class="code_line">&nbsp;&nbsp;WriteLn(S[I]);</div><div class="code_line">End.</div></ol></div></div></div></div><br>
<br>
Следует заметить, что в нулевом элементе строки содержится байт, содержащий длину строки. Можно получить длину строки следующим образом:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">Var</div><div class="code_line">&nbsp;L : Byte &nbsp;;</div><div class="code_line">&nbsp;S : String;</div><div class="code_line">Begin</div><div class="code_line">&nbsp;S := &#39;12345&#39;;</div><div class="code_line">&nbsp;L := Byte(S[0]); { В L теперь содержится длина строки, в данном случае - 5 }</div><div class="code_line">End.</div></ol></div></div></div></div><br>
<br>
Отдельные символы совместимы с типом <strong class='tag-b'>char</strong>, и над ними можно производить те же действия:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">Var</div><div class="code_line">&nbsp;S &nbsp;: String;</div><div class="code_line">&nbsp;Ch : Char &nbsp;;</div><div class="code_line">Begin </div><div class="code_line">&nbsp;S := &#39;Hello, World!&#39;</div><div class="code_line">&nbsp;Ch := S[1]; { сейчас Ch = &#39;H&#39; }</div><div class="code_line">&nbsp;S[2] := UpCase(S[2]); { S теперь равна &#39;HEllo, World!&#39; }</div><div class="code_line">End.</div></ol></div></div></div></div><br>
<br>
<strong class='tag-b'><span class='tag-u'>Заполнение строки одинаковым символом:</span></strong><br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">Var</div><div class="code_line">&nbsp;S : String;</div><div class="code_line">Begin</div><div class="code_line">&nbsp;FillChar(S[1], 80, &#39;P&#39;); { Пишем в строку 80 букв P }</div><div class="code_line">&nbsp;S[0] := Char(80); { Устанавливаем длину строки в 80 символов }</div><div class="code_line">End.</div></ol></div></div></div></div>]]></description>
        <author>Eiden</author>
        <category>Pascal: Структуры данных</category>
      </item>
	
      </channel>
      </rss>
	