Оптимизация простой функции - C (СИ)
Формулировка задачи:
Задача- Напишите функцию, которая обрезает пробелы в конце переданной ей строки. Функция должна быть написана в расчёте на работу с очень длинными строками с очень большим количеством пробелов, оптимизирована по количеству обращений к памяти.
Функцию написал- нет проблем.. протестил на строках длинной порядка 1000 символов.
Думаю тут ограничение только на размер типа unsigned int.
Вопрос - ее как то еще можно оптимизировать на ваш взгляд?
ИМХО - все обращения к памяти это вычисление длинны строки стандартной функцией и просмотр элементов строки с конца.
Вот, решил проконсультироваться. Заранее спс!
void TrimRight( char *str ) { unsigned int nStrLen = strlen(str); while(str[nStrLen-1] == ' ') nStrLen--; if(str[nStrLen-1] != ' ') str[nStrLen] = 0; else str[nStrLen-1] = 0; }
Решение задачи: «Оптимизация простой функции»
textual
Листинг программы
#include <stdio.h> #include <string.h> #include <ctype.h> /* char * rtrim(char * s){ char * t = s + strlen(s) - 1; while ( t >= s && isspace(*t) ) *t-- = 0; return s; } */ char * rtrim(char * s){ char * pStr = s, * pSpc = NULL; for ( ; *pStr; ++pStr ){ if ( isspace(*pStr) ){ if ( !pSpc ) pSpc = pStr; } else pSpc = NULL; } if ( pSpc ) *pSpc = '\0'; return s; } int main(void){ char buf[BUFSIZ]; while ( printf("String: ") && fgets(buf, BUFSIZ, stdin) && *buf != '\n' ) printf("Result: \"%s\"\n", rtrim(buf)); return 0; }
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы
- Определяем функцию rtrim, которая принимает указатель на строку в качестве аргумента и возвращает указатель на отформатированную строку
- Проходим по каждому символу входной строки
- Если текущий символ является пробелом и предыдущий символ не является пробелом, то заменяем текущий символ на 0
- Возвращаем отформатированную строку
- В функции main запрашиваем у пользователя ввод строки до тех пор, пока он не введет пустую строку
- Выводим отформатированную строку на экран
- Возвращаем 0, чтобы указать, что программа успешно завершилась
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д