Подсчитать количество слов, нечетной длины, найти частоту вхождения букв и удалить текст в круглых скобках - C (СИ)
Формулировка задачи:
С клавиатуры вводится строка . Разработать программу , которая реализует указанные действия .
а ) подсчитывает количество слов , которые имеют нечетную длину ;
б) выводит на экран частоту вхождения каждой буквы ;
в) удаляет текст размещен в круглых скобках.
Решение задачи: «Подсчитать количество слов, нечетной длины, найти частоту вхождения букв и удалить текст в круглых скобках»
textual
Листинг программы
#include <stdio.h>
#include <string.h>
#include <ctype.h>
unsigned count_words_odd(const char* s);
void print_repchar(FILE* _out, const char* s);
char* str_rem(char* s, char fc, char lc);
int main(void){
char s[] = "lang (wolf), cat, dog, (bat), (bea), tiger, (leon), (bars)";
printf("count words odd: %u\n", count_words_odd(s));
print_repchar(stdout, s);
puts(s);
puts( str_rem(s, '(', ')') );
return 0;
}
//кол-во слов, которые имеют нечетную длину
unsigned count_words_odd(const char* s){
unsigned i = 0, n = 0;
do {
if(isalnum(*s))
++i;
else if(i > 0){
if(i & 1)
++n;
i = 0;
}
} while(*s++ != '\0');
return n;
}
//выводит на экран частоту вхождения каждой буквы
void print_repchar(FILE* _out, const char* s){
int i;
unsigned int abc[26];
memset(abc, 0, sizeof(abc));
while(*s){
i = toupper(*s);
if(i >= 'A' && i <= 'Z')
++abc[i - 'A'];
++s;
}
for(i = 0; i < 26; ++i){
if(abc[i] > 0)
fprintf(_out, "%C(%u)\n", (char)(i + 'A'), abc[i]);
}
putc('\n', _out);
}
//удаляет текст размещен в круглых скобках
char* str_rem(char* s, char fc, char lc){
char* i, *p, *t = s;
while(*s && (*s != fc))
++s;
for(p = s; *s; *s = *p){
if(*p == fc){
i = p + 1;
while(*i && (*i != lc))
++i;
if(*i == lc){
++s;
p = i;
continue;
}
}
++s;
++p;
}
return t;
}
Объяснение кода листинга программы
- В функции
count_words_oddпроисходит подсчет слов, которые имеют нечетную длину. - В функции
print_repcharвыводится на экран частота вхождения каждой буквы. - В функции
str_remудаляется текст, размещенный в круглых скобках.