Удалить группы пробелов если имеются те, которыми эта строка начинается и заканчивается - C (СИ)
Формулировка задачи:
Дана строка,преобразовать ее следующим образом:удалить группы пробелов если имеються которыми эта строка начинаеться и заканчивается, заменить каждую внутренюю группу пробелов одним пробелом и все это нужно сделать без использование <string.h>. Проблема в том, что программа просто удаляет пробелы, не знаю как сделать замену группы одним. Подскажите, что нужно исправить.
#include <stdio.h> #include <stdlib.h> int main() { char str[]=" ab c de f "; char symbol=' '; int n,i; n=i=0; for(str[i]==symbol;str[i]!='\0';i++) { while(str[i]==symbol) { i++; } str[n]=str[i]; n++; } str[n]='\0'; printf("\n Ryad bez probela:%s\n",str); return 0; }
Решение задачи: «Удалить группы пробелов если имеются те, которыми эта строка начинается и заканчивается»
textual
Листинг программы
#include <stdio.h> int main() { char str[] = " ab c de f "; char symbol = ' '; int n = 0, i; int isSpace = 0; for (i = 0; str[i] != '\0'; ++i) { if (str[i] == symbol) { n++; isSpace = 1; } else { if (isSpace) { isSpace = 0; str[i - (n--)] = symbol; } str[i - n] = str[i]; } } str[i - n] = '\0'; printf("[%s]\n", str); return 0; }
Объяснение кода листинга программы
- В начале программы подключается стандартная библиотека для работы с файлами и вводом-выводом (stdio.h).
- Далее идет объявление функции main(), которая является точкой входа в программу.
- Внутри функции main() объявляются и инициализируются переменные:
- str[] — массив символов, в котором будет происходить обработка.
- symbol — символ, который нужно удалить из строки.
- n — счетчик количества символов, которые нужно удалить.
- i — счетчик цикла, который будет использоваться в цикле for.
- isSpace — флаг, который показывает, что текущий символ является пробелом.
- Затем идет цикл for, который будет перебирать все символы в строке str[].
- Внутри цикла проверяется, является ли текущий символ равным символу, который нужно удалить (symbol).
- Если текущий символ равен symbol, то увеличивается счетчик n и устанавливается флаг isSpace в 1.
- Если текущий символ не равен symbol, то проверяется значение флага isSpace.
- Если isSpace равно 1, то значение n уменьшается на 1, флаг isSpace устанавливается в 0 и символ, который нужно удалить (symbol), записывается вместо n-го пробела в строке str[].
- Если isSpace равно 0, то значение n уменьшается на 1 и текущий символ записывается вместо n-го пробела в строке str[].
- После выхода из цикла for, в конце строки str[] добавляется символ '\0', чтобы обозначить конец строки.
- Затем выводится отформатированная строка str[] с помощью функции printf().
- В конце программы возвращается 0, чтобы указать, что программа успешно завершилась.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д