Оптимизация простой функции - 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;
}

Объяснение кода листинга программы

  1. Включаем необходимые заголовочные файлы
  2. Определяем функцию rtrim, которая принимает указатель на строку в качестве аргумента и возвращает указатель на отформатированную строку
  3. Проходим по каждому символу входной строки
  4. Если текущий символ является пробелом и предыдущий символ не является пробелом, то заменяем текущий символ на 0
  5. Возвращаем отформатированную строку
  6. В функции main запрашиваем у пользователя ввод строки до тех пор, пока он не введет пустую строку
  7. Выводим отформатированную строку на экран
  8. Возвращаем 0, чтобы указать, что программа успешно завершилась

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 4.429 из 5
Похожие ответы