Удаление лишних пробелов из строки - 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. - В конце функции возвращается новая строка.