В заданной строке удалить все лишние пробелы, заменяя несколько подряд идущих пробелов одним - C (СИ)
Формулировка задачи:
Добрый день. Столкнулся с проблемой в программе. Пробелы удаляет, но если ввести пробелы перед строкой, то их не удалит.
Полное задание:
Написать функцию, которая позволяет в заданной строке удалить все лишние пробелы, заменяя несколько подряд идущих пробелов одним.
Специфика состоит в том, что в задании нельзя использовать библиотечные функции обрабатывания строк.
Ниже код моей программы:
C помощью еще одного цикла и метки смог избавится от проблемы, однако это только при первой вводе строки. При повторном вводе и если перед строкой пробелы - все равно один пробел остается.
#include <stdio.h>
int prob(char s)
{
int d;
d = 0;
printf("Input your text:\n");
while ((s = getchar()) != EOF)
{
if (s == ' ')
d++;
if (d <= 1 )
putchar (s);
if (s != ' '&&d > 1)
putchar (s);
if (s != ' ')
d=0;
}
printf("Press any key to exit...");
}Решение задачи: «В заданной строке удалить все лишние пробелы, заменяя несколько подряд идущих пробелов одним»
textual
Листинг программы
int main()
{
int d=0;
char s;
setlocale(0,"");
while ((s = getchar())==' ')
;
putchar(s);
while ((s = getchar()) != EOF)
{
if (s == ' ')
d=1;
else
{
if(d)
{
putchar(' ');
d=0;
}
putchar (s);
}
}
printf("Press any key to exit...");
return 0;
}
Объяснение кода листинга программы
- Установка локализации на русскую языковую среду.
- Переменная
dинициализируется нулем. - Переменная
sиспользуется для хранения символа, который считывается из стандартного ввода. - В цикле while считывается каждый символ из стандартного ввода до тех пор, пока не встретится символ пробела.
- Если символ равен пробелу, то переменная
dустанавливается равной единице. - Если символ не равен пробелу, то проверяется значение переменной
d. - Если значение переменной
dравно единице, то выводится один пробел. - Значение переменной
dустанавливается равным нулю. - Выводится символ, который был считан из стандартного ввода.
- Цикл while считывает каждый символ из стандартного ввода до тех пор, пока не достигнет конца файла.
- Если символ равен пробелу, то ничего не происходит.
- Если символ не равен пробелу, то он выводится на экран.
- После окончания работы программы выводится сообщение
Press any key to exit.... - Программа возвращает ноль, что означает успешное завершение работы.