Меню Сайта
Все для ucoz
Категории раздела
Категории раздела
Block title
Профиль
Четверг
03.07.2025
20:21

[ Управление профилем ]
Главная » Статьи » Amx Mod X Скриптинг

Программирование для начинающих
Часть 2. Символы, множество символов.
Строки
Строка - это два или более смежных символа. С точки зрения программирования, строка - это множество чисел. Каждый символ имеет ASCII кодировку, которая представляется числами от 0 до 255. В данной статье мы будем рассматривать только символы алфавита, хотя у ASCII есть и множество других. Строка должна заканчиваться пустым символом, которое в таблице ASCII имеет значение 0. Когда данное число будет найдено - значит это конец строки. Когда вы объявляете массив для хранения строки, необходимо увеличивать его размер на 1, чтобы иметь место для пустого символа. Например, для хранения слова "word" в вашей строке, объявленный массив будет new szWord[5]. Когда вы объявляете массив, каждый элемент равен пустому символу, поэтому не нужно прописывать конец строки самостоятельно. Имейте в виду, что массив начинается с 0, так в нашем примере символы будут иметь 0-4 позиции.

Кодировка ASCII
Запомните, что заглавные и строчные символы не равны. К примеру, 'a' это не одно и тоже, что и 'A'.

Значения ASCII кодировки:
A-Z диапозон 65-90. 65 = 'A' и 90 = 'Z'.
a-z диапозон 97-122. 97 = 'a' и 122 = 'z'.

Объявление строк
К примеру, мы хотим объявить строку и сохранить в ней слово "word" или "WORD".

Мы можем сделать это несколькими путями:
Код: Выделить всё

new szWord
[] = "word"
new szWord[] = "WORD"  

При объявлении строки и присвоения ей значения (слова) размер массива указывать не нужно, компилятор сделает это автоматически.
Или:
Код: Выделить всё

new szWord
[5]
szWord[0] = 119 //w
szWord[1] = 111 //o
szWord[2] = 114 //r
szWord[3] = 100 //d
szWord[4] = 0   // конец строки - это делать не обязательно, потому что при объявлении массива все его элементы равны пустому значению

szWord[0] = 87 //W
szWord[1] = 79 //O
szWord[2] = 82 //R
szWord[3] = 68 //D
szWord[4] = 0  // конец строки - это делать не обязательно, потому что при объявлении массива все его элементы равны пустому значению

// Вам необязательно запоминать значения кодировки ASCII, для этого достаточно использовать
// и символы с использованием одной кавычки

szWord[0] = 'w'
szWord[1] = 'o'
szWord[2] = 'r'
szWord[3] = 'd'
szWord[4] = '^0' 
 


Завершение строки
Напомним, что если в строки найдено пустое значение (0), то следовательно - это конец строки.

Маленький пример:
Код: Выделить всё

new szWord
[] = "alphabet"

szWord[5] = 0  // Установка 'b' в пустое значение

//Результатом будет "alpha" вместо "alphabet"      


Перемещение по строке (циклы)
Рассмотрим пример перемещения по строке для подсчитывания количества пробелов и символа 't'. Это можно сделать с использованием if/else или switch.

Цикл - это механизм повторения одно и того же кода программы определенное количество раз. В данном случае мы знаем количество повторений, поэтому будем использовать цикл for.
Его синтаксис: for ( выражение1 ; выражение2 ; выражение3 )

Пояснение:
выражение1 - обычно используется для объявления переменной-индекса и присвоения ей первоначального значения.
выражение2 - условие, которое используется перед началом каждого повторения, если оно возвращает значение верно (true), то происходит выполнение кода цикла.
выражение3 - используется обычно для увеличения переменной-индекса, объявленной в выражение1.
Примечание: Вы можете не использовать выражения: for ( ; ; ) (это приведет к бесконечному циклу, не делайте этого, если вы не понимаете, что делаете).

Код: Выделить всё
//Выражение1: Объявление переменной-индекса i и присвоение ей значения 0 (по умолчанию). 
//Выражение2: Выполнять цикл пока i > 9 (цикл будет выполняться пока i <= 9).
//Выражение3: Увеличение i на один (каждый раз увеличение i на 1).

// В данном цикле выполнение кода произойдет при i = 0. Выполниться тело цикла, а затем произойдет обращение к выражению2.
// Если это выражение верно, то произойдет обращение к выражению3.
// Цикл будет выполняться пока выражение2 не станет неверным (false).

for ( new i ; i <= 9 ; i++ )
{
        // код, который будет выполняться
}  


strlen() - это функция, встроенная в AMXX, которая вернет длину строки (не включая пустое значение).

Код: Выделить всё

new szString
[] = "this is a test string" // Объявление массива и присвоение ему предложения "this is a test string".
new iLen = strlen( szString ) // Объявление переменной iLen и присвоение ей длины строки szString. Если вы знаете длину, ее можно указать вручную.
new iSpaces
new iLetter_t

// Начинаем с 0 и выполняем цикл пока i меньше длины строки
for ( new i = 0 ; i < iLen ; i++ )
{
        if ( szString[i] == ' ' )
                iSpaces++
        else if ( szString[i] == 't' )
                iLetter_t++

// или
        switch ( szString[i] )
        {
                case ' ': iSpaces++
                case 't': iLetter_t++
        }
}
 

Результат:
Пробелов: 4
Символа 't': 4

Создание массива для хранение строчного алфавита:
Код: Выделить всё

new szAlphabet
[27] // 26 символов + 1 пустой символ

// 'a' имеет значение 97 в кодировке ASCII, следовательно мы будем добавлять его в нашем цикле

for ( new i = 0 ; i < 26 ; i++ )
        szAlphabet[i] = i + 97 // Присвоение переменной значение и его увеличение

// Что у нас получится в результате выполнения цикла:
// szAlphabet[0] = 97   //a
// szAlphabet[1] = 98   //b
// szAlphabet[2] = 99   //c
// szAlphabet[3] = 100  //d
// ...
// szAlphabet[25] = 122  //z 
 


Массив строк
Вы можете создать массив строк известный также, как "двумерный массив".
Код: Выделить всё

new szString
[][] = { "this" , "is" , "an" , "array" , "of" , "strings" }
// Следовательно каждый элемент массива будет хранить определенное значение: szString[0] = "this", szString[1] = "is"

// Если массив будет заполняться в режиме работы плагина, например, для хранения имен игроков или их Steam ID
new szString[кол-во строк][длина самой длинной строки] 
 


К примеру, чтобы получить доступ к слову "array" в нашем двумерном массиве, мы будем использовать szString[3]. Чтобы получить доступ к одному символу, например, первому 'r' в слове 'array', мы будем использовать szString[3][1].
Категория: Amx Mod X Скриптинг | Добавил: Alex (12.10.2012)
Просмотров: 1652 | Комментарии: 1 | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]