Удалить группы пробелов если имеются те, которыми эта строка начинается и заканчивается - 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, чтобы указать, что программа успешно завершилась.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д