Удаление лишних пробелов из строки - 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; }
Объяснение кода листинга программы
- В функции
task
происходит удаление лишних пробелов из строки, переданной в качестве аргумента. - В первых двух строках функции выделяется память под новую строку с помощью функции
malloc
. При этом, размер памяти равен длине исходной строки плюс один символ. - Затем, в цикле
while
происходит проход по каждому символу исходной строки. - Внутри цикла, для каждого символа проверяется, является ли он пробелом. Если это не пробел, то он копируется в новую строку.
- После каждого символа в новой строке добавляется символ '\0', который является маркером конца строки.
- После прохода по всем символам исходной строки, новая строка присваивается исходной строке.
- Затем, память, выделенная под новую строку, освобождается с помощью функции
free
. - В конце функции возвращается новая строка.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д