void trim(char* const str)
{
char* begin = str;
char* end = str;
while (isspace(*begin))
{
++begin;
}
char* s = begin;
while (*s != '\0')
{
if (!isspace(*s++))
{
end = s;
}
}
*end = '\0';
const int dist = end - begin;
if (begin > str && dist > 0)
{
memmove(str, begin, dist + 1);
}
}
Изменяет строку на месте, так что вы все равно можете ее удалить.
Не использует функции библиотеки необычных штанов (если только вы не считаете, что это мемо).
Обрабатывает перекрытие строк.
Обрезки спереди и сзади (не средний, извините).
Быстро, если строка большая (memmove часто пишется на ассемблере).
Перемещает символы только при необходимости (я нахожу это истинным в большинстве случаев, потому что строки редко имеют начальные пробелы и часто не имеют хвостовых пробелов)
Я хотел бы проверить это, но я опаздываю. Наслаждайтесь поиском ошибок ...: -)