Технический форум

Технический форум (http://www.tehnari.ru/)
-   Помощь студентам (http://www.tehnari.ru/f41/)
-   -   Определить слово с самым большим количеством заглавных букв (http://www.tehnari.ru/f41/t263530/)

wooop 24.03.2019 21:33

Определить слово с самым большим количеством заглавных букв
 
Файл содержит набор символов. Слово - произвольная последовательность латинских символов, разделители-любые другие символы.Определить слово с самым большим количеством заглавных букв. Если таких несколько вывести все
Подскажите пожалуйста как все слова вывести
Вроде понимаю Завести массив строк и счетчик, изначально в нем 0. Если в слове нужных букв меньше, чем в уже найденном максимальном - ничего не делать. Если равно - добавить слово в массив, инкрементировать счетчик. Если больше - записать слово в первый элемент массива, в счетчик - единицу.
Но реализовать не могу
Код:

#include <stdio.h>
#include <string.h>
#include <ctype.h>
#define N 100
#define DELIM " \t\n"

int upper_letters(const char * word) {
    int uppers = 0;
 
    for ( ; *word; ++word )
        uppers += !!isupper(*word);
   
    return uppers;
}

int main(int argc, char const *argv[])
{

          char buf[N];//обьявление строкового массива
        int i=0,max=0;
        FILE *filP;
        filP=fopen("file.txt","r");

        fgets(buf,N,filP);

       
 
                  fgets(buf,N,filP);
        char * str = buf, * maxWord, * curWord;
        int maxUppers, curUppers;
 
        for ( ; *str; ++str )
            if ( ! isalpha(*str) )
                *str = ' ';
       
        maxWord = strtok(buf, DELIM);
        maxUppers = upper_letters(maxWord);
 
        while ( ( curWord = strtok(NULL, DELIM) ) ) {
            curUppers = upper_letters(curWord);
            if ( curUppers > maxUppers ) {
                maxWord = curWord;
                maxUppers = curUppers;
            }
        }
 
        printf("First word with max. upper letters: %s\n", maxWord);
   
 
       
        fclose(filP);
        return 0;
}


Vladimir_S 24.03.2019 21:47

К сожалению, на СИ не пишу, но может быть другой алгоритм попробовать, если с этим проблемы? Например, так: проходим файл 2 раза, на первом проходе ищем максимальное количество заглавных букв, содержащихся в словах (просто число!), а на втором — выводим слова, содержащие найденное количество указанных букв. Как встречаем такое слово, так сразу и выводим. Не?


Часовой пояс GMT +4, время: 00:28.

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.