Как при выводе на экран игнорировать слова определённой длины? - C (СИ)
Формулировка задачи:
На вход в программе даётся текст (например "Hello, world! Hi"). Как сделать так, чтобы программа выводила только те слова, в которых кол-во символов больше числа, в значении некой переменной?
Например, в данном случае ("Hello, world! Hi"), при какой-нибудь N = 2, программа бы выводила только "Hello, world!".
P.S: Нельзя использовать string.h
Решение задачи: «Как при выводе на экран игнорировать слова определённой длины?»
textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
void prf(char *s, int n)
{
int i;
for(i = 0; i < n ;i++, s++) {
putchar(*s);
}
}
int main()
{
char *s = (char *) malloc(20);
gets(s);
int n = 2;
scanf("%d", &n);
int z = 0;
int m = 0;
while(1) {
if(ispunct(*s) || isspace(*s) || *s == '\0') {
z = (m == 0) ? z : z - 1;
if(z > n) {prf(s-z, z);putchar(*s);}
z = 0;
m++;
if(*s == '\0') break;
}
s++;
z++;
}
}
Объяснение кода листинга программы
В этом коде реализована функция, которая выводит на экран строку, игнорируя слова определенной длины.
- Сначала объявляются необходимые переменные:
s- указатель на строку, которую необходимо вывести;n- длина слова, которое необходимо игнорировать;z- количество слов, которые уже были пропущены;m- количество слов, которые уже были выведены.
- Затем происходит чтение строки и ее длины с помощью функций
getsиscanf. - Далее в цикле происходит проверка каждого символа строки:
- Если символ является знаком препинания, пробелом или нулевым символом, то происходит обновление счетчиков
zиm, а также выводится на экран последовательность символов, которая была пропущена. - Если символ не является знаком препинания, пробелом или нулевым символом, то он выводится на экран.
- Если символ является знаком препинания, пробелом или нулевым символом, то происходит обновление счетчиков
- Цикл продолжается до тех пор, пока не будет достигнут конец строки.