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