Подсчитать количество слов, нечетной длины, найти частоту вхождения букв и удалить текст в круглых скобках - 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;
}

Объяснение кода листинга программы

  1. В функции count_words_odd происходит подсчет слов, которые имеют нечетную длину.
  2. В функции print_repchar выводится на экран частота вхождения каждой буквы.
  3. В функции str_rem удаляется текст, размещенный в круглых скобках.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 3.5 из 5
Похожие ответы