Функции для работы со строками
| |
_wS_
|
Дата: Понедельник, 02.04.2012, 00:36:54 | Сообщение # 1 |
|
Как узнать количество символов в строке:
Код 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 |
|
Цитата 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 |
|
Цитата 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 |
|
Цитата Shouldercannon ( ) new String:s[]. decl String:s[];
По факту это одно и тоже? Что лучше использовать сейчас: new или decl? Старый синтаксис: decl String:s[4]. Новый: char s[4].
decl = объявление = в памяти мусор (быстрее). new = определение/инициализация = в памяти нули (медленнее).
|
|
| |
|