Просмотр полной версии : [Function] trim(str[]) - Удаляет пробелы (или другие символы) из начала и конца строки
Salvacore
29.10.2013, 20:34
trim — Удаляет пробелы (или другие символы) из начала и конца строки.
Функция, как в PHP или других ЯП.
Прототип ф-ии:
stock trim(str[], Char = ' ');
Аргументы:
str[] - строка, которую необходимо обрезать;
Char - символ, который необходимо удалить, по умолчанию - пробел.
Ф-ия возвращает:
Обрезанную строку
Код:
stock trim(str[], Char = ' ')
{
new string[128], pos[2] = {-1, -1};
for(new i, l = strlen(str); i != l; i++)
{
if(str[i] != Char && pos[0] == -1) pos[0] = i;
if(str[l - 1 - i] != Char && pos[1] == -1) pos[1] = l - i;
if(pos[0] != -1 && pos[1] != -1) break;
}
strmid(string, str, pos[0], pos[1]);
return string;
}
Пример:
new test[] = " TEST FUNC! ";
printf("%s", trim(test)); //output:TEST FUNC!
new test2[] = "$$$$$$Games$$$$$$$";
printf("%s", trim(test2, '$')); //output:Games
//проверка на пустую строку:
new string[] = " ";
if(strlen(trim(string)) == 0) return printf("Пустая строка!");
new string2[] = " I ";
printf("strlen: %d", strlen(trim(string2))); //output:strlen 1
Salvacore
29.10.2013, 20:44
полезно новичкам
Спасибо.
#Carleone
я реально думал это у меня муха))))
Salvacore
29.10.2013, 23:52
up!
Спасибо:D
Вот ещё:
stock trim(str[], Char = ' ')
{
new pos;
for(pos = strlen(str); str[pos] <= Char; ) pos--;
str[pos + 1] = EOS;
for(pos = 0; str[pos] <= Char; ) pos++;
strdel(str, 0, pos);
}
Автор: Londlem
Seregamil
15.12.2013, 07:24
stock trim(str[], Char = ' ')
{
new string[128], pos[2] = {-1, -1};
for(new i, l = strlen(str); i != l; i++)
{
if(str[i] != Char && pos[0] == -1) pos[0] = i;
if(str[l - 1 - i] != Char && pos[1] == -1) pos[1] = l - i;
if(pos[0] != -1 && pos[1] != -1) break;
}
strmid(string, str, pos[0], pos[1]);
return string;
}
немного извращенный вариант у тебя, или я недопонял
trim(str[], s = ' '){//by Seregamil, хотя это никому не интересно.
for(new j = 0; j!= strlen(str); j++){
if(str[j] == s) strdel(str, j, j+1);
}
return str;
}
немного извращенный вариант у тебя, или я недопонял
trim(str[], s = ' '){//by Seregamil, хотя это никому не интересно.
for(new j = 0; j!= strlen(str); j++){
if(str[j] == s) strdel(str, j, j+1);
}
return str;
}
Функция удаляет пробелы из начала и конца строки.
Seregamil
15.12.2013, 13:04
не то.
Daniel_Cortez
15.12.2013, 16:48
немного извращенный вариант у тебя, или я недопонял
trim(str[], s = ' '){//by Seregamil, хотя это никому не интересно.
for(new j = 0; j!= strlen(str); j++){
if(str[j] == s) strdel(str, j, j+1);
}
return str;
}
Нет никакого смысла возвращать входную строку str, когда она и так передаётся по ссылке и модифицируется функцией strdel. Мало того, будет ещё теряться куча времени на вызов нативных функций strlen и strdel с каждой итерацией.
Так уж и быть, поддержу тему создания своих вариантов...
trim(str[], ch = ' '){
new len;
if(ch == '\0' || (len = strlen(str)),len == 0) return;
new pos1 = 0, pos2 = len;
while(str[pos1] == ch) ++pos1;
while(str[--pos2] == ch) {}
if(pos1 != 0 || pos2 != len)
strmid(str, str, pos1, pos2+1, len);
}
Seregamil
15.12.2013, 17:14
Мало того, будет ещё теряться куча времени
где ты увидел кучу потерянного времени?
Seregamil
15.12.2013, 17:24
И про возвращенную строку.
print(trim(str));
Если я использую такой код для моего варианта без возвращения строки - компилятор меня убъет.
Daniel_Cortez
15.12.2013, 17:28
где ты увидел кучу потерянного времени?
Под "кучей" имелось в виду сравнительно много времени, которое тратится на переход из абстрактной машины Pawn на нативный код и обратно.
И про возвращенную строку.
print(trim(str));
Если я использую такой код для моего варианта без возвращения строки - компилятор меня убъет.
No problem.
trim(str), print(str);
Seregamil
15.12.2013, 17:45
No problem.
trim(str), print(str);
так скучно, иногда мне нужно сразу обработать и вывести, а не обработать, подождать и вывести
Powered by vBulletin® Version 4.2.0 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot