Напечатать заданный текст, удалив из него лишние пробелы - C (СИ)
Формулировка задачи:
Ребят,я начинающая программистка) помогите решить задачу на С
Напечатать заданный текст, удалив из него лишние пробелы, т.е. из нескольких подряд идущих пробелов оставить только один.
Решение задачи: «Напечатать заданный текст, удалив из него лишние пробелы»
textual
Листинг программы
#include <stdio.h>
char* func(char* str) {
char* p;
unsigned i = 0;
for (p = str; *p; ++p) {
if ((*p == ' ') && (*(p + 1) == ' ')) {
i++;
}
else {
*(p - i) = *p;
}
}
*(p - i) = 0;
return str;
}
int main() {
char text[] = "This is test text";
printf("%s\n", func(text));
return 0;
}
Объяснение кода листинга программы
- Подключение стандартной библиотеки ввода-вывода
- Создание функции
func, которая принимает указатель на строку в качестве аргумента и возвращает указатель на измененную копию строки - Внутри функции объявление указателя на символ
pи переменнуюiтипаunsigned - Использование цикла
forдля прохода по каждому символу строки, начиная с первого символаp - Внутри цикла проверка условия: если текущий символ
pравен пробелу и следующий символ*(p + 1)также равен пробелу, то увеличивается счетчикi - Если текущий символ
pне равен пробелу или следующий символ*(p + 1)не равен пробелу, то значениеpприсваивается*(p - i) - После завершения цикла, последний символ
pприсваивается нулевому значению, что приводит к завершению строки - Функция возвращает измененный указатель на строку
str - В функции
mainсоздается массив символовtextс заданным текстом - Вызов функции
funcс аргументомtextи вывод результата на экран с помощью функцииprintf - Возврат 0 из функции
main, что означает успешное завершение программы