Удалить каждое четное слово в строке, при этом между словами может стоять не 1, а несколько пробелов - C (СИ)
Формулировка задачи:
Требуется удалить каждое четное слово в строке, при этом между словами может стоять не 1 а несколько пробелов
Решение задачи: «Удалить каждое четное слово в строке, при этом между словами может стоять не 1, а несколько пробелов»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <ctype.h>
int main()
{
static char str[256] = "apple fruit orange juice crunch lemon\0";
printf("%s\n",str);
int cnt = 1;
for (int i = 0; str[i] != '\0'; i++)
if ((isspace(str[i]) && !isspace(str[i+1])) ||
(!isspace(str[i]) && (str[i+1] == '\0')))
{
if ((cnt % 2) == 0)
{
int pos = i-1;
while (isspace(str[pos])) pos--;
while (!isspace(str[pos])) pos--;
int len = abs(pos-i);
if (str[i+1] == '\0') len++;
while (--len >= 0)
{
for (int q = pos; str[q] != '\0'; q++)
str[q] = str[q+1];
}
}
cnt++;
}
printf("%s\n",str);
_getch();
}
Объяснение кода листинга программы
- Включаются необходимые заголовочные файлы
- Объявляется и инициализируется строка str
- Выводится исходная строка на экран
- Инициализируется счётчик cnt, который будет отслеживать количество удалённых пар слов
- В цикле обрабатывается каждое слово в строке, кроме последнего (так как последняя пара слов обрабатывается в отдельном блоке)
- Проверяется, является ли текущее слово четным (или последним в строке)
- Если слово четное, то оно удаляется из строки, сдвигая все последующие слова на одну позицию влево
- После удаления четного слова, счётчик cnt увеличивается на единицу
- После обработки всех слов в строке, выводится измененная строка на экран
- Ждется нажатия клавиши для завершения программы