Удалить группы пробелов если имеются те, которыми эта строка начинается и заканчивается - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Дана строка,преобразовать ее следующим образом:удалить группы пробелов если имеються которыми эта строка начинаеться и заканчивается, заменить каждую внутренюю группу пробелов одним пробелом и все это нужно сделать без использование <string.h>. Проблема в том, что программа просто удаляет пробелы, не знаю как сделать замену группы одним. Подскажите, что нужно исправить.
Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. int main()
  4. {
  5. char str[]=" ab c de f ";
  6. char symbol=' ';
  7. int n,i;
  8. n=i=0;
  9. for(str[i]==symbol;str[i]!='\0';i++)
  10. {
  11. while(str[i]==symbol)
  12. {
  13. i++;
  14. }
  15. str[n]=str[i];
  16. n++;
  17. }
  18. str[n]='\0';
  19. printf("\n Ryad bez probela:%s\n",str);
  20. return 0;
  21. }

Решение задачи: «Удалить группы пробелов если имеются те, которыми эта строка начинается и заканчивается»

textual
Листинг программы
  1. #include <stdio.h>
  2.  
  3. int main() {
  4.     char str[] = "   ab   c  de  f  ";
  5.     char symbol = ' ';
  6.     int n = 0, i;
  7.     int isSpace = 0;
  8.  
  9.     for (i = 0; str[i] != '\0'; ++i) {
  10.         if (str[i] == symbol) {
  11.             n++;
  12.             isSpace = 1;
  13.         }
  14.         else {
  15.             if (isSpace) {
  16.                 isSpace = 0;
  17.                 str[i - (n--)] = symbol;
  18.             }
  19.             str[i - n] = str[i];
  20.         }
  21.     }
  22.     str[i - n] = '\0';
  23.  
  24.     printf("[%s]\n", str);
  25.  
  26.     return 0;
  27. }

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

  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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы