Функция для удаления со строки слов - C (СИ)
Формулировка задачи:
Здравствуйте, помогите написать функию для удаления все слов которые не имеют окончание ing.
Решение задачи: «Функция для удаления со строки слов»
textual
Листинг программы
#include<stdio.h>
#include<string.h>
#include<ctype.h>
#include<string.h>
void str_ing (char s[]);
int main (void){
char s[]="testing a program with ing\0";
printf ("%s \n", s);
str_ing(s);
printf ("%s \n", s);
}
void str_ing (char s[]){
int count=0, i=0, count_ing=0;
int len = strlen(s);
do {
while (isalpha(s[i]) && s[i]!=' '){
count++;
i++;
}
if (count >= 3)
for (int j=i-3;j<i;j++)
if (s[j]=='i'|| s[j]=='n' || s[j]=='g')
count_ing++;
if (count_ing==3){
for (int j=i;j>i-1-count;j--)
s[j]='\b';
}
count=0;
count_ing=0;
i++;
}while (i<len);
int j;
for (i=0,j=0;i<len; i++)
if (s[i]!='\b'){
s[j]=s[i];
j++;
}
s[j]='\0';
}
Объяснение кода листинга программы
В этом коде реализована функция str_ing, которая принимает на вход строку s и удаляет из неё все слова, состоящие из букв i, n и g, если эти слова состоят из трёх и более букв. В противном случае, если слово состоит из двух букв, оно остаётся в строке. Список действий, которые происходят в коде:
- В функции main создаётся тестовая строка s =
testing a program with ing. - Строка выводится на экран.
- Вызывается функция str_ing с аргументом s.
- После выполнения функции str_ing, строка снова выводится на экран.
- В функции str_ing создаются три переменные: count - счётчик количества букв в текущем слове, i - счётчик, отмечающий позицию текущей буквы в строке, count_ing - счётчик, отмечающий количество найденных букв i, n, g.
- В цикле do-while происходит проход по всем буквам строки s.
- Внутри цикла в цикле while происходит поиск букв i, n, g, следующих друг за другом, и подсчёт количества таких букв (count_ing).
- Если количество букв i, n, g равно трём, то в цикле for происходит замена этих букв на символ '\b' (обратный слэш, пробел).
- После каждой замены счётчики count и count_ing сбрасываются в ноль.
- После прохода по всем буквам строки s, в цикле for происходит сборка итоговой строки, в которую переносятся все символы исходной строки, не являющиеся символом '\b'.
- В конце функции в строку s добавляется символ '\0' (нулевой символ), который обозначает конец строки.