Убрать лишние пробелы в последовательности - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Есть последовательность символов. убрать все лишние пробелы, тоесть из нескольких пробелов ,что стоят подряд, оставить только один

Решение задачи: «Убрать лишние пробелы в последовательности»

textual
Листинг программы
#include <stdio.h>
 
char* Pack(char text[]) {
    char* ptr = text;
    unsigned offs = 0;
    unsigned space = 0;
 
    for (; *ptr; ++ptr) {
        if (*ptr == ' ') {
            space++;
        }
        else {
            if (space) {
                offs += space - 1;
                space = 0;
            }
        }
        *(ptr - offs) = *ptr;
    }
    *(ptr - offs) = 0;
 
    return text;
}
 
int main() {
 
    char text[] = "Hello    World!    I    Am   Student    !";
 
    printf("%s\n", Pack(text));
 
    return 0;
}

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

  1. В функции Pack представлен код, который удаляет лишние пробелы из строки, переданной в качестве аргумента.
  2. Строка, которую необходимо обработать, сохраняется в переменной text.
  3. В функции объявлены следующие переменные:
    • ptr - указатель на текущий символ в строке;
    • offs - смещение, на котором происходит замена последнего пробела на символ;
    • space - счётчик пробелов.
  4. В цикле for происходит проход по каждому символу строки.
  5. Если текущий символ является пробелом (*ptr == ' '), то счётчик пробелов увеличивается (space++).
  6. Если текущий символ не является пробелом (*ptr != ' '), то проверяется значение счётчика пробелов.
  7. Если счётчик пробелов больше 0, то:
    • смещение увеличивается на значение счётчика пробелов минус один (offs += space - 1;);
    • счётчик пробелов сбрасывается в ноль (space = 0;);
  8. Значение текущего символа заменяется на значение символа, находящегося по смещению от начала строки (*(ptr - offs) = *ptr;).
  9. После прохода по всем символам строки, в *(ptr - offs) записывается ноль (*(ptr - offs) = 0;), чтобы корректно завершить строку.
  10. Функция возвращает исходную строку.
  11. В функции main создаётся тестовая строка Hello    World!    I    Am   Student   !.
  12. С помощью функции Pack из этой строки удаляются лишние пробелы, и результат выводится на экран с помощью функции printf (printf(%s\n, Pack(text));).
  13. В конце функции main возвращается ноль, чтобы указать, что программа успешно завершилась.

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


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

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

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