Определить слово, в котором доля согласных максимальна - C (СИ)

  1. Для каждого слова заданного предложения указать долю согласных. Определить слово, в котором доля согласных максимальна. Никак не могу сделать. Помогите пожалуйстаа)


textual

Код к задаче: «Определить слово, в котором доля согласных максимальна - C (СИ)»

#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
#define DELIMITERS " ?.!,\r\n\t"
 
int is_vowel(char ch)
{
    ch = tolower(ch);
    return ch == 'a' ||
        ch == 'e' ||
        ch == 'o' ||
        ch == 'u' ||
        ch == 'i';
}
 
size_t count_if(const char *str, int (*predicate)(char))
{
    size_t count = 0;
    while (str && *str)
        if (predicate(*str++))
            count++;
    return count;
}
 
const char* magic(char *s)
{
    const char* ptr = NULL;
    const char* res = NULL;
    double max = 0.0;
    double tmp = 0.0;
    size_t vowel_count = 0;
    size_t len = 0;
    for (ptr = strtok(s, DELIMITERS); ptr; ptr = strtok(NULL, DELIMITERS))
    {
        len = strlen(ptr);
        vowel_count = count_if(ptr, is_vowel);
        tmp = (100.0 * (len - vowel_count)) / len;
        printf("%s %2.2lf%%\n", ptr, tmp);
        if (tmp > max)
        {
            max = tmp;
            res = ptr;
        }
    }
    return res;
}
 
int main()
{
    char s[BUFSIZ];
    const char *p = NULL;
    fgets(s, BUFSIZ, stdin);
    p = magic(s);
    if (p)
    {
        // TODO
    }
    return EXIT_FAILURE;
}

СДЕЛАЙТЕ РЕПОСТ

13   голосов, оценка 4.000 из 5



Похожие ответы
  1. Задана последовательность из N вещественных чисел. Определить сколько чисел меньше K, равно K и больше K. (массив random )

  1. Нужно задать строку из букв, цифр и так далее и сделать так, чтобы программа вывела на экран каких гласных букв нет в этой строке. Помогите либо начать, либо направьте где можно почитать про это, на форуме может кто видел подобные задания? Заранее спасибо!

  1. Помогите пожалуйста. Использовать стандартные функции и арифметические операторы; изучить операторы отношения и присваивания, логические операции, условный оператор и оператор-переключатель; научиться использовать в программах операторы цикла. Написать программы на изученные темы. Определить, сколько цифр содержит заданное целое число и имеются ли в нем повторяющиеся цифры.

  1. Решить эту задачу используя простейшие структуры данных Определить количество слов, у которых первый и последний симво-лы совпадают между собой.

  1. Ни как не могу доделать кусочек лабы , буду признателен за помощь ) Даны вещественные числа x , y . Определить принадлежит ли точка с координатами (x;y) заштрихованной плоскости. Картинка к задаче :

  1. Заполнить одномерный массив вводом с клавиатуры. Выяснить верно ли что сумма элементов массива есть чётное число.

  1. Написала программу, она компилируется, но не даёт результат (текстовые файлы я создала). Помогите, пожалуйста C++1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 #include #include #include FILE *f, *f1; int main() {int x, q=0,  sum=0; double l; f=fopen("D:\\TextFile", "rt"); f1=fopen("D:\\rez", "wt"); if(f == NULL)         {           printf("Problems");           system("pause");           return 1;         } if (fscanf(f,"%d",&x)>0)   {sum+=x; q+=1; l=sum/q; }     fprintf(f1," %3lf",l); fclose(f); fclose(f1);   return 0; }

  1. Моё задание звучит так, найти ближайшее расстояние от прямой до треугольника(при этом нужно указать ошибки типа: треугольник врождён в точку, прямая врождена в точку, треугольник врождён в прямую, прямая пересекает треугольник и тд.) Я сделал всё кроме одного, пересекает ли прямая треугольник? Как мне это вывести? Ниже будет приложен код может поможет для наглядности, можете скинуть код для определения пересекает ли прямая треугольник? Если пересекает вывести на экран 0.00 (типа расстояние нулевое).C1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 #include #include #include "stdafx.h" #include "testing.h" #include   int _tmain(int argc, _TCHAR* argv[]) {     int x_k; //x - для координаты *K*     int y_k; //y - для координаты *K*       int x_m; //x - для координаты *M*     int y_m; //y - для координаты *M*       int x_a; //x - для координаты *A*     int y_a; //y - для координаты *A*       int x_b; //x - для координаты *B*     int y_b; //y - для координаты *B*       int x_c; //x - для координаты *C*     int y_c; //y - для координаты *C*         double A,B,C;         double kool, kool1, kool2;       int DO = 1000, OT = -1000; // Diapazon_do = 1000, Diapazon_ot = -1000 --Это диапазон координат           TESTING       input_printf ("Input 10 nomber:");     scanf ("%d %d %d %d %d %d %d %d %d %d", &x_k, &y_k, &x_m, &y_m, &x_a, &y_a, &x_b, &y_b, &x_c, &y_c);// Ввод десяти координат для точек         //Проверяем врождён ли треугольник в линию     if (abs(x_a == y_a && x_b == y_b && x_c == y_c))     {         error_printf ("invalid input data");         WAIT_ANY_KEY         return (0);     }     //Првоеряем врождён ли треугольник в линию по горизонтали либо по вертикали     if (x_a == x_b && x_a == x_c && x_b == x_c || y_a == y_b && y_a == y_c && y_b == y_c)     {         error_printf ("invalid input data");         WAIT_ANY_KEY         return (0);     }       //Проверяем врождена ли прямая в точку     if (x_k == x_m && y_k == y_m)     {         error_printf ("invalid input data");         WAIT_ANY_KEY         return (0);     }       A = y_m-y_k;     B = x_m-x_k;     C = (y_m-y_k)*(-x_k)-((x_m-x_k)*(-y_k));         kool = abs(A * x_a + B * y_a + C)/sqrt(pow((double)A, 2)+pow((double)B, 2));     kool1 = abs(A * x_b + B * y_b + C)/sqrt(pow((double)A, 2)+pow((double)B, 2));     kool2 = abs(A * x_c + B * y_c + C)/sqrt(pow((double)A, 2)+pow((double)B, 2));         if (kool < kool1 && kool < kool2)     {     printf("%0.2f", kool);     }     if (kool1 < kool && kool1 < kool2)     {     printf("%0.2f", kool1);     }     if (kool2 < kool && kool < kool1)     {     printf("%0.2f", kool2);     }       WAIT_ANY_KEY       return 0; }

  1. Дана строка. Определить, сколько раз в нее входит группа букв abc.

  1. Дана строка состоящая из слов, разделенных запятыми. Определить порядковый номер слова минимальной длины и количество символов в этом слове. Строка задается в качестве параметра командной строки.