Заказать игровой сервер Контакты (заказать плагин/исправить ошибки/другое) Поиск

[ вход ]
[ последние сообщения ]

  • Страница 1 из 1
  • 1
Форум » SourceMod >> CS:Source >> CSGO » Уроки SourceMod (SourcePawn) Скриптинга » Функции для работы со строками
Функции для работы со строками
_wS_ Дата: Понедельник, 02.04.2012, 00:36:54 | Сообщение # 1
Thanks
Как узнать количество символов в строке:

Код
new String:my_string[] = "1x3x5x7";
PrintToServer("-> %d", strlen(my_string)); // 7


Как сравнить две строки (true значит, что сравниваем с учетом регистра, false - без) :

Код
new String:x[] = "1q";
new String:y[] = "1q";
if (StrEqual(x, y, true)) PrintToServer("Строки равны");
else PrintToServer("Строки не равны");


Как узнать есть ли фраза/подстрока/символы в строке. Находит первое совпадение и возвращает позицию (индекс), с которой начинается наша фраза. Если совпадений нет, вернёт -1.

Код
new String:my_string[] = "avatar aAng (avatar korRa)";
new x_pos = StrContains(my_string, "tar", true);
PrintToServer("-> %d", x_pos); // 3


Как преобразовать строку в целое число.
Если в строке есть какие-то левые буквы или символы, кроме цифр, то вернёт 0.

Код
new String:my_string[] = "15";
new nuM = StringToInt(my_string);
PrintToServer("-> %d", nuM);


Как преобразовать строку в float число (с точкой):

Код
new String:my_string[] = "15.2";
new Float:nuM = StringToFloat(my_string);
PrintToServer("-> %.1f", nuM);


Как преобразовать целое число в строку:

Код
decl String:my_string[3];
IntToString(15, my_string, 3);
PrintToServer("-> %s", my_string);


Как преобразовать float число в строку:

Код
decl String:my_string[5];
FloatToString(15.0, my_string, 5);
PrintToServer("-> %s", my_string);


Как составить строку из нескольких переменных:

Код
new x = 1, Float:y = 2.0, String:z[] = "cat", String:my_string[75];
Format(my_string, 75, "x = %d, y = %.1f, z = %s", x, y, z);
PrintToServer(my_string); // x = 1, y = 2.0, z = cat


Как избавиться от кавычек по бокам (обрезать):

Код
new String:my_string[] = "\"123\"";
PrintToServer(my_string); // "123"
StripQuotes(my_string);
PrintToServer(my_string); // 123


Как убрать пробелы по бокам:

Код
new String:my_string[] = "   1 2 3      ";
TrimString(my_string);
PrintToServer(my_string);


Как разбить строку по символ(у/ам) или фразе.

Код
decl String:buf[4][10], nuM;
if ((nuM = ExplodeString("xzy - 123-abc", "-", buf, 4, 10)) > 1)
{
       PrintToServer("Строка разбита на %d новых:", nuM);
       for (new i = 0; i < nuM; i++)
       {
           TrimString(buf[i]);
           PrintToServer(buf[i]);
       }
}
else PrintToServer("В строке нет символа -");

// 4 - максимальное количество новых строк
// 10 - максимальная длина каждой строки (кол-во символов)


Как заменить в строке определённые символы на другие.
См. эту тему.
 
MrGreen Дата: Пятница, 27.08.2021, 11:18:21 | Сообщение # 2
Сообщений: 21
Репутация: 0 [ +/- ]
Здравствуйте, подскажите, пожалуйста, а есть ли возможность удалять строки?
 
_wS_ Дата: Пятница, 27.08.2021, 16:30:06 | Сообщение # 3
Thanks
Цитата MrGreen ()
есть ли возможность удалять строки?

Имеется в виду наверно "Удалить строку из строки"?
ReplaceString и ReplaceStringEx функции. Вторая используется, если нужно заменить только одно совпадение.

Код
native int ReplaceString(
    char[] text,
    int maxlength,
    const char[] search,
    const char[] replace,
    bool caseSensitive=true);


Код
char s[] = "abcdef";
int replacements = ReplaceString(s, sizeof(s), "cd", "", true);
PrintToServer("s = '%s'. Фраза 'cd' в строке 'abcdef' повторяется %d раз и была удалена.", s, replacements);

// Меняет только одно совпадение и возвращает индекс (-1 = замены не было).
// searchLen -1 = strlen("\\"). Если > -1, то используется вместо strlen. (так же и с replaceLen).
native int ReplaceStringEx(s, sizeof(s), "\\", "/", int searchLen=-1, int replaceLen=-1, bool учет регистра=true);


Обрезать строки можно и с помощью Format/strcopy.
Код
char s[] = "abcdef";

strcopy(s, sizeof(s), s[2]);
PrintToServer("'%s'", s); // "cdef" или можно было сразу PrintToServer("'%s'", s[2]);

s[2] = 0;
PrintToServer("'%s'", s); // "cd"
 
MrGreen Дата: Пятница, 27.08.2021, 16:40:39 | Сообщение # 4
Сообщений: 21
Репутация: 0 [ +/- ]
Цитата _wS_ ()

char s[] = "abcdef";
int replacements = ReplaceString(s, sizeof(s), "cd", "", true);
PrintToServer("s = '%s'. Фраза 'cd' в строке 'abcdef' повторяется %d раз и была удалена.", s, replacements);
 
// Меняет только одно совпадение и возвращает индекс (-1 = замены не было).
// searchLen -1 = strlen("\\"). Если > -1, то используется вместо strlen. (так же и с replaceLen).
native int ReplaceStringEx(s, sizeof(s), "\\", "/", int searchLen=-1, int replaceLen=-1, bool учет регистра=true);


Получается удалить именно строку в sourcepawn-е нельзя? Если добавил запись в файл .ini потом необходимо удалить запись через админку, найти нужную строку и удалить, в строке содержится стимайди, айпи и ник игрока, все эту строку удалить.
 
_wS_ Дата: Пятница, 27.08.2021, 16:48:03 | Сообщение # 5
Thanks
Цитата MrGreen ()
Получается удалить именно строку в sourcepawn-е нельзя? Если добавил запись в файл .ini потом необходимо удалить запись через админку, найти нужную строку и удалить, в строке содержится стимайди, айпи и ник игрока, все эту строку удалить.

О файле ты только сейчас сказал, я и не думал что речь о нём.
Хранишь в файле инфу в виде структуры KeyValues и удалять/добавлять/изменять несложно.
 
MrGreen Дата: Пятница, 27.08.2021, 16:51:02 | Сообщение # 6
Сообщений: 21
Репутация: 0 [ +/- ]
Цитата _wS_ ()
О файле ты только сейчас сказал, я и не думал что речь о нём.
Хранишь в файле инфу в виде структуры KeyValues и удалять/добавлять/изменять несложно.


Ах вон оно как. Спасибо большое.
 
Shouldercannon Дата: Среда, 21.02.2024, 08:48:40 | Сообщение # 7
Сообщений: 21
Репутация: 0 [ +/- ]
Код
new String:s[]. decl String:s[];

По факту это одно и тоже? Что лучше использовать сейчас: new или decl?
 
_wS_ Дата: Среда, 21.02.2024, 09:40:14 | Сообщение # 8
Thanks
Цитата Shouldercannon ()
new String:s[]. decl String:s[];

По факту это одно и тоже? Что лучше использовать сейчас: new или decl?

Старый синтаксис: decl String:s[4].
Новый: char s[4].

decl = объявление = в памяти мусор (быстрее).
new = определение/инициализация = в памяти нули (медленнее).
 
Форум » SourceMod >> CS:Source >> CSGO » Уроки SourceMod (SourcePawn) Скриптинга » Функции для работы со строками
  • Страница 1 из 1
  • 1
Поиск: