16. Удалить из строки все лишние пробелы.
/* FILENAME : task_1_16.c */
/* Eugene V. Ogurtsov */
/* Last update : 26.05.2000 */
/* Удалить из строки все лишние пробелы. */
/* Написать программу, которая вводит с клавиатуры строку,
* состоящую из латинских букв, пробелов и знаков препинания:
* '.', ',', '!', '?', ':', ';' и выводит на экран данную строку,
* в которой: если между двумя словами нет знака препинания,
* то они разделяются ровно одним пробелом, если знак препинания
* присутствует, то перед ним пробела не ставится, а после
* него - ставится, если подряд идут несколько знаков препинания,
* они могут разделяться 0 или 1 пробелами. */
#include <stdio.h>
void main( void )
{
char str[80];
int i, neword;
printf("Введите строку символов (не более 80) >\n");
gets(str);
i = 0;
neword = 1;
/* Проходим все символы */
while (str[i])
{
/* Пробел - разделитель слов, пока пробел не выводим */
if (str[i] == ' ')
neword = 1;
/* Знак препинания - резделитель, выводим его */
else
if ((str[i] == '.') || (str[i] == ',') || (str[i] == '!') ||
(str[i] == '?') || (str[i] == ':') || (str[i] == ';'))
{
printf("%c", str[i]);
neword = 1;
}
/* Если начинается новое слово, и это не первое слово -
* выводим перед ним пробел */
else
{
if (neword && i)
printf(" ");
printf("%c", str[i]);
neword = 0;
}
i ++;
}
} /* End of 'main' function */
/* End of 'task_1_16.c' file */
|