Удаление лишних пробелов из строки - C (СИ)

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

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

Допустим дана строка :" ФЫвфвфв фывфывф фывфв фывфывфыв asasawq" Нужно что бы слова разделялись только 1 пробелом. Понятное дело через массивы это делается легко, но преподаватель хочет, что бы все это было реализовано строковыми функциями. Подскажите, как можно минимизировать использование массивов и удалить лишние пробелы?

Решение задачи: «Удаление лишних пробелов из строки»

textual
Листинг программы
char *
task (char ** string, char remove_char)
{
    char * new_string = malloc(strlen(string) + 1);
    
    while(**string) {
        new_string = '\0';
        
        if(**string != ' '){
            *new_string = **string;
            ++new_string;
        }
        ++(*string);
    }
    *string = new_string;
    free(new_string);
    return *string;
}

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

  1. В функции task происходит удаление лишних пробелов из строки, переданной в качестве аргумента.
  2. В первых двух строках функции выделяется память под новую строку с помощью функции malloc. При этом, размер памяти равен длине исходной строки плюс один символ.
  3. Затем, в цикле while происходит проход по каждому символу исходной строки.
  4. Внутри цикла, для каждого символа проверяется, является ли он пробелом. Если это не пробел, то он копируется в новую строку.
  5. После каждого символа в новой строке добавляется символ '\0', который является маркером конца строки.
  6. После прохода по всем символам исходной строки, новая строка присваивается исходной строке.
  7. Затем, память, выделенная под новую строку, освобождается с помощью функции free.
  8. В конце функции возвращается новая строка.

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


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

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

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