Убрать лишние пробелы в последовательности - 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; }
Объяснение кода листинга программы
- В функции
Pack
представлен код, который удаляет лишние пробелы из строки, переданной в качестве аргумента. - Строка, которую необходимо обработать, сохраняется в переменной
text
. - В функции объявлены следующие переменные:
ptr
- указатель на текущий символ в строке;offs
- смещение, на котором происходит замена последнего пробела на символ;space
- счётчик пробелов.
- В цикле
for
происходит проход по каждому символу строки. - Если текущий символ является пробелом (
*ptr == ' '
), то счётчик пробелов увеличивается (space++
). - Если текущий символ не является пробелом (
*ptr != ' '
), то проверяется значение счётчика пробелов. - Если счётчик пробелов больше 0, то:
- смещение увеличивается на значение счётчика пробелов минус один (
offs += space - 1;
); - счётчик пробелов сбрасывается в ноль (
space = 0;
);
- смещение увеличивается на значение счётчика пробелов минус один (
- Значение текущего символа заменяется на значение символа, находящегося по смещению от начала строки (
*(ptr - offs) = *ptr;
). - После прохода по всем символам строки, в
*(ptr - offs)
записывается ноль (*(ptr - offs) = 0;
), чтобы корректно завершить строку. - Функция возвращает исходную строку.
- В функции
main
создаётся тестовая строкаHello World! I Am Student !
. - С помощью функции
Pack
из этой строки удаляются лишние пробелы, и результат выводится на экран с помощью функцииprintf
(printf(
%s\n, Pack(text));
). - В конце функции
main
возвращается ноль, чтобы указать, что программа успешно завершилась.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д