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

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

  1. В начале программы подключается стандартная библиотека для работы с файлами и вводом-выводом (stdio.h).
  2. Далее идет объявление функции main(), которая является точкой входа в программу.
  3. Внутри функции main() объявляются и инициализируются переменные:
    • str[] — массив символов, в котором будет происходить обработка.
    • symbol — символ, который нужно удалить из строки.
    • n — счетчик количества символов, которые нужно удалить.
    • i — счетчик цикла, который будет использоваться в цикле for.
    • isSpace — флаг, который показывает, что текущий символ является пробелом.
  4. Затем идет цикл for, который будет перебирать все символы в строке str[].
  5. Внутри цикла проверяется, является ли текущий символ равным символу, который нужно удалить (symbol).
  6. Если текущий символ равен symbol, то увеличивается счетчик n и устанавливается флаг isSpace в 1.
  7. Если текущий символ не равен symbol, то проверяется значение флага isSpace.
  8. Если isSpace равно 1, то значение n уменьшается на 1, флаг isSpace устанавливается в 0 и символ, который нужно удалить (symbol), записывается вместо n-го пробела в строке str[].
  9. Если isSpace равно 0, то значение n уменьшается на 1 и текущий символ записывается вместо n-го пробела в строке str[].
  10. После выхода из цикла for, в конце строки str[] добавляется символ '\0', чтобы обозначить конец строки.
  11. Затем выводится отформатированная строка str[] с помощью функции printf().
  12. В конце программы возвращается 0, чтобы указать, что программа успешно завершилась.

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


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

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

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